如何在laravel ORM中使用相同的输入多次获得相同的结果?

时间:2017-02-28 17:58:28

标签: php laravel orm eloquent

我有不同的输入字段,其中两个是视图中的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,那么它会显示两个数组的正确结果,这是我所期待的。即使用户根据需要输入相同的值,也可以获得相同的结果吗?

1 个答案:

答案 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部分,这不是很好。