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中关系的条件的主要内容,如果未能解决你的问题,请参考以下文章

Spring JPA中关系的动态获取

NSFetchRequest 没有看到 NSManagedObjectContext 中关系的变化

Core Data 中关系的默认值

如何获取核心数据中关系的关系?

如何覆盖 Grails GORM 中关系的级联删除?

如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?