如何在laravel ORM中使用相同的输入多次获得相同的结果?
问题描述:
我有不同的输入字段,其中两个是name_id []和aussehen []在view.for例如,如果用户输入两个相同的值为(1,1)name_id和(1,1)aussenhen 。当我运行下面的查询。如何在laravel ORM中使用相同的输入多次获得相同的结果?
$aussehen=Stufen::whereIN('name_id', $name_id)
->whereIN('stufe',$aussehen)
->get();
当dd($ aussehen)时,我只得到一个数组。而我想有两个相同的数组,因为用户输入相同的值两次。但是,如果用户选择两个不同的值,例如(1,2)为name_id和(3,4)为aussehen然后它显示正确的结果与两个数组我正在期待。无论如何,即使用户输入的时间与他想输入的时间相同,也能得到相同的结果吗?
答
当您使用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
的一部分,这是不是很漂亮。
您的请求有任何意义:如果您更改'name_id'和'ausshen',因为它与db中的两个不同行相匹配,则数组中有两个条目。如果只匹配一行(无论您在输入中提供了多少次相同的值),结果将始终只包含一行。 – DonCallisto
谢谢你的回答。我在想同样的事情。无论如何,如果我想要结果两次? –