Php Laravel:对于每个where子句

Php Laravel:对于每个where子句,php,mysql,laravel-4,Php,Mysql,Laravel 4,我试图返回一个查询,该查询根据用户提交的标记数具有任意数量的where子句 我得到的结果是一个空数组,即使当我单独尝试数组(1)或数组(5)时,它们都返回相同的项。我错过了什么 编辑:: 我希望返回指定了每个标记ID的项目。项目到标记的引用存储在存档\u项目\u元数据表中。我如何才能得到我期望的结果,以及实现这一点的最有效的方法是什么?您正在寻找一个在(1,2,3)样式子句laravel中的标记id具有其中($col,$vals)生成器函数 ->whereIn('archives_it

我试图返回一个查询,该查询根据用户提交的标记数具有任意数量的where子句



我得到的结果是一个空数组,即使当我单独尝试数组(1)或数组(5)时,它们都返回相同的项。我错过了什么

编辑::
我希望返回指定了每个标记ID的项目。项目到标记的引用存储在存档\u项目\u元数据表中。我如何才能得到我期望的结果,以及实现这一点的最有效的方法是什么?

您正在寻找一个
在(1,2,3)
样式子句
laravel
中的标记id具有
其中($col,$vals)
生成器函数

->whereIn('archives_items_metadata.tag_id', $tag_ids)

这会产生意外的结果。这将扩展结果,而不是契约。@egekhter-
其中foo IN(1,2,3)
其中foo=1或foo=2或foo=3相同,这不是您要查找的吗?我正在查找&&子句。同一行怎么可能有两个(或更多)呢同一字段的不同值?如何在多对多表上完成一个查询,其中有试图返回的数据的交集?基本上,您需要
其中('archives\u items\u metadata.tag\u id',$tag\u id)
,如@Victory所说,并使用
have COUNT()=in()中的元素数来限制此结果
。我相信有一种雄辩的方法可以实现这一点。正如@VMai所建议的,您需要使用
where in()
和count。如果您正在查询有说服力的模型,那么我可以向您演示如何查询。否则(
DB::table…
)您需要使用原始语句。在许多情况下,您可以使用在有说服力的模型和查询上可用的相同方法。我也是一个强烈支持在一个模型上使用DB类的人,该模型在构建一个返回许多记录的API时扩展了eloquent,因为eloquent创建了许多访问器属性,增加了返回响应的时间。我的应用程序从Model::切换到DB::(“Model”)将json响应时间从2000ms减少到400ms。你只需要自己编写更多的代码。
->whereIn('archives_items_metadata.tag_id', $tag_ids)
$tag_count = count($tag_ids);
$items = DB::table('archives_items')->join('archives_items_metadata', 'archives_items_metadata.archive_item_id', '=', 'archives_items.id')->join('tags', 'archives_items_metadata.tag_id', '=', 'tags.id')
->whereIn('archives_items_metadata.tag_id', $tag_ids)->whereNull('archives_items_metadata.deleted_at')
->groupBy('archives_items_metadata.archive_item_id')->havingRaw('count(*)='.$tag_count->get();