Laravel Eloquent加入多个表格

时间:2014-12-04 16:08:55

标签: php mysql laravel laravel-4

我在2张桌子上加入JOIN有问题。其中一个与Eloquent模型'Message'没有直接关联。

我的表格:

videos
-- id
-- file

messages
-- m_id
-- m_type
-- m_video

videos_languages
-- video_id
-- language_id

我有以下型号:

User.php  
Video.php  
Message.php

Video.php有如下关系:

public function languages()
{
    return $this->belongsToMany('Language','videos_languages','video_id','language_id')->withPivot('titel','vl_id');
}

Message.php

public function messageVideos()
{
    return $this->belongsTo('Video','m_video','id');
}

public function messageUser()
{
    return $this->belongsTo('Visitor','m_from','v_id');
}

在我的主脚本中,我执行以下命令:

$message = new Message();
$message->where('m_to','=',12345)->with('messageVideos','messageUser')->first()

所以我得到了带有关联表“视频”和“用户”的Message数据。

我现在的问题:我在此命令中也需要videos_languages,并且它与Message模型无关。

是否可以将它包含在top命令中并使用视频模型中的languages()关系?

1 个答案:

答案 0 :(得分:0)

我认为你不需要“whereHas”,而是“Eager Load Constraints”。 这可以在laravel docs中的eager loading下找到。

例如:

$users = User::with(array('posts' => function($query)
{
    $query->where('title', 'like', '%first%');
}))->get();

然而,您需要嵌套它并加载更多关系。

所以就是这样:

$message = Message::where('m_to','=',12345)
->with(array('messageVideos.languages' => function($query)
{
    $query->where('language_id', '=', 2);
},
'messageUser'))->first();