我有一个名为assetIDs
的数组,如下所示
$assetIDs = Collection {#505 ▼
#items: array:2 [▼
0 => 4
1 => 7
]
}
我在表格中有数据如下所示
我正在使用此
对上表进行查询 $supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)->pluck('supplier_id');
以上查询的结果在
之下Collection {#510 ▼
#items: array:3 [▼
0 => 1
1 => 1
2 => 2
]
}
这里whereIn
返回满足条件的所有可能行。实际上我需要获得结果,就像supplier_id
具有assetIDs
数组的值一样。在我的表supplier_id=1
中,4
和7
都有值就像下面的集合一样。
Collection {#510 ▼
#items: array:3 [▼
0 => 1
1 => 1
]
}
有人可以建议我解决这个问题吗?
答案 0 :(得分:4)
您可以尝试:
$supplier_id = SupplierAsset::whereIn('asset_id',$asset_ids)
->groupBy('supplier_id')
->havingRaw('count(distinct asset_id) = ' . count($assetIDs))
->pluck('supplier_id');
答案 1 :(得分:0)
这是你应该做的mysql:
1-获取拥有超过1个supplier_id的所有ID:
SELECT supplier_id, Count(distinct asset_id) as dist_asst
FROM Table
GROUP BY supplier_id
HAVING dist_asst > 1
2-然后进行加入:
SELECT t1.supplier_id
FROM Table t1
INNER JOIN (SELECT supplier_id, Count(distinct asset_id) as dist_asst
FROM Table
GROUP BY supplier_id
HAVING dist_asst > 1) t2 on t2.supplier_id = t1.supplier_id