我有不同的输入字段,其中两个是视图中的name_id []和aussehen []。例如,如果用户为name_id输入两个相同的值(1,1),并且还为(1)输入aussehen.when我在下面运行这个查询。
$aussehen=Stufen::whereIN('name_id', $name_id)
->whereIN('stufe',$aussehen)
->get();
我在dd($ aussehen)时只得到一个数组。而我希望有两个相同的数组,因为用户输入相同的值两次。但是如果用户选择两个不同的值,例如(1,2)表示name_id,(3,4)表示aussehen,那么它会显示两个数组的正确结果,这是我所期待的。即使用户根据需要输入相同的值,也可以获得相同的结果吗?
答案 0 :(得分:0)
使用Model::whereIn('id', [1, 1, 1, 1])->get()
时,告诉SQL数据库驱动程序运行查询SELECT * from model WHERE id IN (1, 1, 1, 1)
,其结果与SELECT * FROM model WHERE id = 1
相同。
你应该知道,除了重度计算之外,数据库查询是正在运行的PHP应用程序中最慢的一个。所以你不想对数据库进行多次查询。
我最好的猜测是:
$name_id = $request->input('name_id', []);
$aussehen = $request->input('aussehen', []);
$query = Stufen::whereIn('name_id', array_unique($name_id))
->whereIn('stufe', array_unique($aussehen))
->get()
->indexBy('name_id');
$collection = [];
foreach ($name_id as $nameId) {
$collection[] = $results[$nameId];
}
return collect($collection);
代码的作用是重复的(请记住,雄辩的模型是对象,因此它只是参考)从查询到之后作为集合返回的php数组的唯一索引结果。
要进行一点推断,您应该将$query
直接返回到视图中,并根据需要多次使用每个对象,这样您将只使用$query
并删除$collection
部分,这不是很好。