【发布时间】:2015-02-02 14:29:30
【问题描述】:
我在 JOIN 超过 2 个表时遇到问题。其中之一与 Eloquent 模型“消息”没有直接关联。
我的表:
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');
}
消息.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()
所以我得到了带有关联表“视频”和“用户”的消息数据。
我现在的问题:我在这个命令中还需要videos_languages,它与消息模型无关。
是否可以将其包含在 top 命令中并使用 Video 模型中的 languages() 关系?
【问题讨论】:
-
你可以用点嵌套模型:->with('messageVideos.languages','messageUser')->first();这行得通吗?
-
嗨,Björn,谢谢,这行得通。但是有可能在命令中为语言添加 where 条件吗?现在我得到了与视频相关的所有语言,但在一个方法中,我只想要 id 为 1 的语言。
-
我相信你现在需要 whereHas laravel.com/docs/4.2/eloquent#querying-relations ,你可以嵌套它们。
-
嵌套它不起作用,它说 messageVideos.languages 未定义:@user2094178
$message->where('m_to','=',12345)->with('messageVideos.languages','messageUser')->whereHas('messageVideos.languages',function($q) { $q->where('id','=','1'); })->first() -
whereHas不支持messageVideos.languages,languages必须有自己的whereHas并嵌套在messageVideos的whereHas中。
标签: php mysql laravel laravel-4