如何使用 Laravel 5 从相关表中查询具有条件的表

Posted

技术标签:

【中文标题】如何使用 Laravel 5 从相关表中查询具有条件的表【英文标题】:How do I query a table with conditions from related table with Laravel 5 【发布时间】:2015-07-25 20:35:12 【问题描述】:

我有两张桌子,

表用户: 身份证、姓名等

表视频: id、user_id 等

型号:视频

public function user()

    return $this->belongsTo('App\Models\User');

我想选择用户“Max”拥有的所有视频。

我已经尝试过以下方法:

$Videos = \App\Models\Video::with('user')->where('user.name','=','Max')->get();



Unknown column 'user.name' in 'where clause' (SQL: select * from `videos` where `videos`.`deleted_at` is null and `user`.`name` = Max)

谢谢!

【问题讨论】:

【参考方案1】:

这就是whereHas 的用途:

$Videos = \App\Models\Video::with('user')->whereHas('user', function($q)
    $q->where('name','=','Max');
)->get();

【讨论】:

has() 和 whereHas() 的问题在于它使用子查询进行全表扫描。你最好手动加入。 @asdasd 这确实是我在一张有 10000 个原始数据的桌子上执行此操作时遇到的问题。它会挂在大桌子上

以上是关于如何使用 Laravel 5 从相关表中查询具有条件的表的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3 查询从通过外键连接的 4 个表中获取结果

Laravel 5.4 从相关表中删除表行和行

如何在 laravel 中使用查询生成器根据 id 从多个表中获取数据

Laravel 5.4:直接从数据库中的列中减去数字

如何重构 Laravel Eloquent 查询

Laravel Eloquent,仅选择存在关系的行