mysql - 在 Laravel 中重构合并查询
问题描述
我目前有 2 种方法可以双向执行搜索查询,然后将它们合并在一起以检索结果。
模型关系
public function linkedTo() {
return $this->hasMany(Linked::class, 'team_id');
}
public function linkedFrom() {
return $this->hasMany(Linked::class, 'linked_id');
}
询问
$linkedTo = $team->linkedTo()->with(['games' => function ($query) use ($search) {
$query->where('title', 'like', "%$search%");
}])->get();
$linkedFrom = $team->linkedFrom()->with(['games' => function ($query) use ($search) {
$query->where('title', 'like', "%$search%");
}])->get();
$links = $linkedTo->merge($linkedFrom);
为了从搜索结果中获得我需要的结果,我必须将它们合并在一起。
有没有一种更简洁的方法可以在一个查询中将它们连接在一起?
解决方案
如果你想减少代码重复(但实际上不改变执行的内容),你可以这样做:
$filter = function ($query) use ($search) {
$query->where('title', 'like', "%$search%");
};
$linkedTo = $team->linkedTo()->with(['games' => $filter ])->get();
$linkedFrom = $team->linkedFrom()->with(['games' => $filter ])->get();
$links = $linkedTo->merge($linkedFrom);
推荐阅读
- java - 实现 IP 网关(在 Java 中?)
- google-maps - 如何通过“mid”参数从 Google Maps API 下载 KML 文件?
- c++ - 为什么 for 循环只取这个简单代码中的最后一个字符串?
- left-join - cx_Oracle 在左加入表两次时冻结(两个别名)
- vb.net - 您将如何在 VB.NET 中构造具有不同数据类型的数据
- c++ - 右值引用可以作为 const 引用传递吗?
- java - Spring Boot 选择了错误的 CorsFilter
- c++ - 为什么按位 OR 和 AND 逻辑没有按预期工作?
- sql-server - T-SQL - 大表中的总 SUM 行和列
- java - 将 List 添加到嵌套 List 时,为什么需要使用构造函数来创建新的列表实例,而不是仅添加现有列表?