Php 没有给出期望的结果
我有以下两个表格: unotes unote_单位 ====== ========== id unote\u id 附注单位编号 我试图检索其相关unit_id列与输入数组完全匹配的unotes行 因此,我运行以下查询: $unote=unote::whereHas'units',函数$query使用$request{ $query->units.id',$request->unit\u列表; } ->用计数“单位” ->有'units\u count'、'='、$u list\u count ->得到 ->拔毛; 但是,上述查询的问题是,即使它只有一个匹配的unit_id,它也会检索数据。例如,我有以下数据集:Php 没有给出期望的结果,php,mysql,laravel,eloquent,query-builder,Php,Mysql,Laravel,Eloquent,Query Builder,我有以下两个表格: unotes unote_单位 ====== ========== id unote\u id 附注单位编号 我试图检索其相关unit_id列与输入数组完全匹配的unotes行 因此,我运行以下查询: $unote=unote::whereHas'units',函数$query使用$request{ $query->units.id',$request->unit\u列表; } ->用计数“单位” ->有'units\u count'、'='、$u list\u cou
unotes //with related unit_id
========
id = 3 //49865, 49866, 49867
id = 4 //49865, 49866
对于上面提到的代码,如果我通过[4986655555],它应该只返回IDS3和ID4,其中包含一个匹配项,但不包含所有匹配项
我也发现了类似的问题,但运行查询会返回基数冲突:1241操作数应包含2列:
我还发现了一个类似的问题,但似乎太贵了
下面是开始使用的伪SQL:因为WHERE刚刚使用指定的过滤器向查询添加了WHERE EXISTS子句,WHERE对于任何匹配都将返回true。您可以尝试的一件事是运行一个原始子查询来获取设备ID列表并进行比较
$search_id=[4986649865];
对$search\u id进行排序;
$search\u id=内爆,,$search\u id;
Unote::selectid
->何处
从unote\u unit中选择GROUP\u CONCATunit\u id ORDER BY unit\u id,其中unote\u id=unotes.id=?,
[$search\u id]
->得到
->拔毛;
注意,如果启用了软删除功能,则还需要筛选子查询中的软删除项。似乎还不起作用,在传递时显示两行[49865,49866]。事实上,它应该只返回id 4对了,我忘了你想要精确匹配的。所以,将RLIKE替换为=,并将参数更改为$search\u id。
$unote = UNote::with('units')
->whereHas('units', function ($query) use ($request) {
$query->selectRaw("count(distinct id)")->whereIn('id', $request->unit_lists);
}, '=', $u_list_count)
->get()
->pluck("id");