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中关系的条件的主要内容,如果未能解决你的问题,请参考以下文章
快速向有关系的表中插入 200 多个数据 - Laravel 5.6
Laravel 删除数据 - SQLSTATE [42S22]:找不到列:1054 未知列