通过 Eloquent 搜索具有多行的多个 ID
Posted
技术标签:
【中文标题】通过 Eloquent 搜索具有多行的多个 ID【英文标题】:Search Multiple ID's with Multiple Rows by Eloquent 【发布时间】:2021-12-31 22:46:07 【问题描述】:我有一张表,用于获取输入数据的数据组合。比如多个分子(化学组合)作为一个组合。
输入
$id = $required->input('search'); // array:2 [ 0 => "3" 1 => "8"]
案例 1:
表 1
id | refid | product_id | name | ref_2 |
---|---|---|---|---|
1 | 1,3,46,7 | 5 | test | 6 |
2 | 1,3,8,90 | 10 | test1 | 8 |
3 | 3,8,67 | 14 | test 4 | 11 |
4 | 8,699, | 19 | test 4 | 11 |
查询
$model=Model::whereIn('ref_id',$id)->pluck('product_id');
Fetch Product,组合查询包含id的3,8
但它正在获取 id 的包含 3 或 8
案例 2
表 2
id | refid | product_id | name | ref_2 |
---|---|---|---|---|
1 | 3 | 5 | test | 6 |
2 | 5 | 10 | test1 | 8 |
3 | 8 | 5 | test 4 | 11 |
4 | 6 | 19 | test 4 | 11 |
$model = Model::whereIn('ref_id', $id)->groupBy('product_id')->pluck('product_id');
这可能吗?有更好的方法吗?
【问题讨论】:
【参考方案1】:whereIn
不是这样工作的,它使用IN
运算符生成查询。
SELECT * FROM table WHERE column IN (value1, value2)
您可以简单地使用LIKE
运算符来搜索ref_id
列。
$id = $required->input('search'); // array:2 [ 0 => "3" 1 => "8"]
$like = implode(',', $id); // string: "3,8"
$molecule = Molecule::where('ref_id', 'LIKE', "%$like%")->pluck('product_id');
【讨论】:
嘿,谢谢,我还有另一个问题。请详细说明案例 2 @Ozan kurt 这有点奇怪,在您的示例中,数据库中的product_id
列将被您的 GROUP BY
子句覆盖。我不明白你的逻辑。
它是 SELECT * FROM table WHERE column IN (value1, value2) group by product_id。
是的,我知道,但这没有意义,因为它会导致您丢失数据。例如,第一行名称是“test”,但它将与第三行合并。这将导致第三行名称“test 4”被覆盖。 ---- 最后你会收到:i.imgur.com/p300tJt.png
是的,但有一个问题,产品 ID 将相同,因此不能被覆盖。我认为,ref_id 将被请求多个 id。如果 ref_id 3,8 的 product_id 为 5.so 它可以被分组。以上是关于通过 Eloquent 搜索具有多行的多个 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel Eloquent ORM 中获取插入的多行数据
Laravel Eloquent 搜索表单查询(表单中的多个参数)