【问题标题】:Laravel/Eloquent whereIn/where with a pair of setsLaravel/Eloquent whereIn/where 有一对集合
【发布时间】:2020-12-10 21:34:22
【问题描述】:

我的数据库中有 3 个表。

前两个表只是带有 ID 和其他一些列的普通表,例如:

表 1

ID col01
1 ...
2 ...

表 2

ID col01
1 ...
2 ...

第三个表是某种关系/赋值表:

表 3

ID table1_id table2_id text
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

并根据我的要求对其进行了编辑。

像魅力一样工作。

【问题讨论】:

  • 您说您有一个有效的原始 SQL 查询,在您的最后一句话中您谈到了雄辩。您需要 eloquent 还是可以明智地构建原始查询代码?
  • 您是否建立了模型和关系?

标签: laravel eloquent


【解决方案1】:

Laravel 默认不提供任何功能。核心团队表示他们不会保留此功能。您可以阅读帖子here

但您可以创建自己的查询来完成此操作。我提供了一个您可以根据您的规范使用的功能:

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;
}

【讨论】:

    【解决方案2】:

    所以我采用了这里提到的 arcanedev-maroc 的解决方法:https://github.com/laravel/ideas/issues/1021

    并根据我的要求对其进行了编辑。

    像魅力一样工作。

    【讨论】:

      猜你喜欢
      • 2017-07-30
      • 2021-03-23
      • 1970-01-01
      • 2017-04-01
      • 2017-01-12
      • 1970-01-01
      • 2017-06-04
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多