Laravel中关系的条件

Posted

技术标签:

【中文标题】Laravel中关系的条件【英文标题】:Where Condition on relationship in Laravel 【发布时间】:2021-10-09 15:25:57 【问题描述】:

我正在尝试通过 ajax 从数据库中根据他们的 role_id 获取用户。我使用下面的代码做到了这一点。

        $queryModel->whereHas('roles',function ($query) use ($role_id) 
           $query->where("role_id",$role_id);
        );

但在实时服务器上,我有超过 40,000 个用户,因此获取数据需要大量时间。这是因为使用 whereHas()。我尝试使用 where 但它不起作用。 有什么解决方案可以让搜索变得更快。

【问题讨论】:

【参考方案1】:

如果你有一个Role 模型,它也与User 模型有关系,你可以尝试这样的事情;

$role = Role::findOrFail($role_id);
$users = $role->users; // got all users which have that specific role
// or you can use query builder
$users = $role->users()->where('name', 'like', 'U%')->get();

因此,您无需检查所有用户来查找其中哪些用户具有特定角色。您从角色开始并访问它的用户。

【讨论】:

它没有按应有的方式工作。它获取该角色的所有用户,但我只想要用户搜索的用户。例如,如果我搜索“Cut”,它应该给我名字以“cut”开头的人,比如切割公司等 如果您使用$role->users()->where('name', 'like', 'U%')->get();,它会创建一个带有$role->users() 的查询构建器并在其上添加where 子句,它会运行结果查询。所以它不会获取该角色的所有用户。但如果你直接使用$role->users,它会全部获取。您需要将其与括号一起使用。

以上是关于Laravel中关系的条件的主要内容,如果未能解决你的问题,请参考以下文章

计算在 Laravel 中有关系的关系

如何在laravel中的嵌套关​​系上放置where条件?

快速向有关系的表中插入 200 多个数据 - Laravel 5.6

Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列

Laravel eloquent 从不一定有关系的表关系中将数据从大到小排序

如何使用 laravel 模型呈现两个有关系的表,例如“sales”表和“sales_content”的情况