如何在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然后它显示正确的结果与两个数组我正在期待。无论如何,即使用户输入的时间与他想输入的时间相同,也能得到相同的结果吗?

+1

您的请求有任何意义:如果您更改'name_id'和'ausshen',因为它与db中的两个不同行相匹配,则数组中有两个条目。如果只匹配一行(无论您在输入中提供了多少次相同的值),结果将始终只包含一行。 – DonCallisto

+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的一部分,这是不是很漂亮。