2017-02-28 5 views
0

서로 다른 입력 필드가 있고 그 중 두 개는 view의 name_id [] 및 aussehen []입니다. 예를 들어 사용자가 name_id에 대해 두 개의 동일한 값 (1,1)을 입력하고 aussehen에 대해 (1,1)을 입력하면 .when이 아래의 쿼리를 실행합니다.laravel ORM에서 같은 결과를 여러 번 가져 오는 방법은 무엇입니까?

$aussehen=Stufen::whereIN('name_id', $name_id) 
     ->whereIN('stufe',$aussehen) 
     ->get(); 

dd ($ aussehen) 일 때 단 하나의 배열을 얻습니다. 사용자가 동일한 값을 두 번 입력했기 때문에 두 개의 동일한 배열을 갖고 싶었습니다. 그러나 사용자가 name_id에 대해 두 개의 다른 값 (예 : 1,2)을 선택하면 예상 할 수있는 두 개의 배열로 올바른 결과를 표시합니다. 사용자가 원하는만큼 많은 시간을 입력하더라도 동일한 결과를 얻으려면 어쨌든 존재합니까?

+1

당신의 요청은 의미가 있습니다 : 당신이'name_id'와'ausshen'을 변경하면 배열에 두 개의 항목이 있습니다. 왜냐하면 그것은 db의 두 개의 다른 행과 일치하기 때문입니다. 하나의 행과 일치하는 경우 (입력에 동일한 값을 제공 한 횟수와 관계없이) 결과는 항상 하나의 행으로 만 구성됩니다. – DonCallisto

+0

대답 해 주셔서 감사합니다. 나는 같은 생각을하고있었습니다. 결과를 두 번 갖고 싶다면 어쨌든 존재합니까? –

답변

0

Model::whereIn('id', [1, 1, 1, 1])->get()을 사용하는 경우 과 동일한 결과를 생성하는 SELECT * from model WHERE id IN (1, 1, 1, 1) 쿼리를 실행하도록 SQL 데이터베이스 드라이버에 알립니다.

무거운 미적분 외에 데이터베이스 쿼리는 실행중인 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를 사용하고 아주 좋은되지 않습니다 $collection 부분을 삭제 있도록

, 당신이보기에 직접 $query을 반환하고 필요한만큼 여러 번 각 개체를 사용해야합니다, 조금 추정합니다.

관련 문제