Php 没有给出期望的结果

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 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,它也会检索数据。例如,我有以下数据集:

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");