php - Laravel Eloquent JOIN 多个表

标签 php mysql laravel laravel-4

我在连接超过 2 个表时遇到问题。其中之一与 Eloquent 模型“消息”没有直接关联。

我的 table :

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()

因此,我获取了 Message 的数据以及关联的表“Videos”和“User”。

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

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

最佳答案

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

例如:

$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();

关于php - Laravel Eloquent JOIN 多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27298620/

相关文章:

mysql - 在 Laravel 中使用 key 环

PHP 输出缓冲区不刷新

php - CSS bootstrap 计算列数

laravel - Laravel 5处理所有错误

mysql orderby数字和时间戳字符串之间的区别

MySQL 字符串格式化+条件语句

mysql - 无法从 MySQL 8.0.12 降级到更早版本

php - 如何选择带条件的数据

php - 即使值不存在于 where 子句中也得到返回

mysql - 查找期间计算器中的 OneToMany 和 ManyToOne