laravel - Laravel/Eloquent whereIn/where 有一对集合
问题描述
我的数据库中有 3 个表。
前两个表只是具有 ID 和其他一些列的普通表,例如:
表格1
ID | col01 |
---|---|
1 | ... |
2 | ... |
表 2
ID | col01 |
---|---|
1 | ... |
2 | ... |
第三个表是某种关系/分配表:
表3
ID | table1_id | table2_id | 文本 |
---|---|---|---|
1 | 1 | 1 | .. |
2 | 1 | 2 | .. |
3 | 1 | 3 | .. |
4 | 2 | 1 | .. |
5 | 3 | 3 | .. |
现在我确实有一个 SQL 语句,它完全符合我的要求:
SELECT * FROM table_3 where (table1_id, table2_id) in ( (1, 1), (2, 1), (3, 3));
所以我将以下请求正文发送到 API:
{
"assignments": [
{
"table1_id": 1,
"table2_id": 1
},
{
"table1_id": 2,
"table2_id": 1
},
{
"table1_id": 3,
"table2_id": 3
}
]
}
我确实验证了我的请求
->validate($request,
[
'assignments' => 'required|array',
'assignments.*.table1_id' => 'required|integer|min:1|max:20',
'assignments.*.table2_id' => 'required|integer|min:1|max:20'
]
现在我有点坚持如何使用雄辩的命令(例如 whereIn)来获得我想要的输出。
提前致谢!
编辑
所以我采用了这里提到的 arcanedev-maroc 的解决方法:https ://github.com/laravel/ideas/issues/1021
并对其进行编辑以适合我的要求。
奇迹般有效。
解决方案
Laravel 默认不提供任何功能。核心团队表示他们不会保留此功能。你可以在这里阅读这篇文章。
但是您可以创建自己的查询来完成此操作。我提供了一个您可以根据您的规范使用的功能:
public function test(Request $request)
{
$body=$request->input('data');
$data=json_decode($body)->assignments;
$query='(table1_id, table2_id) in (';
$param=array();
foreach($data as $datum)
{
$query=$query."(".$datum->table1_id.",".$datum->table2_id."), ";
}
$query = rtrim($query, ", ");
$query = $query.")";
$result=DB::table('table3')->whereRaw($query)->get();
return $result;
}
推荐阅读
- python - 如何在 Windows/Anaconda 终端上运行 .py 文件?
- python - 计算 Numpy 数组的 n 长度的滚动平均值
- java - 无法使用 itextpdf 阅读 PDF
- java - java - 如何在具有泛型参数和返回类型方法的java中使用反射获取类的实例?
- flutter - Dart 命名构造函数 vs 静态方法更喜欢什么?
- python - 如何使用 Django Rest Framework 在 CRUD API 中使用其他 URL
- git-lfs - GitAhead 大文件存储
- kubernetes - 如何在 Kubernetes 中为 statefulsets 资源设置适当的权限?
- json - 如何在 file_get_content 的结果中忽略 PHP 通知?
- reactjs - 等待 react-router history.goBack 完成