Laravel에서 쿼리를 수행하면 :
$foods = Food::where(...)->get();
... 모델 객체 $foods
의 Illuminate 컬렉션 입니다 Food
. (본질적으로 모델의 배열입니다.)
그러나이 배열의 키는 다음과 같습니다.
[0, 1, 2, 3, ...]
... 24의 값을 Food
가진 객체 를 변경하려면 id
이 작업을 수행 할 수 없습니다.
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... 이는 id
24 의 요소가 아닌 배열의 25 번째 요소 만 변경하기 때문 입니다.
모든 속성 / 열 (예 : ID / 색상 / 연령 등)별로 컬렉션에서 단일 (또는 여러) 요소를 얻으려면 어떻게해야합니까?
물론 다음과 같이 할 수 있습니다.
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... 그러나 그것은 단지 끔찍합니다.
물론 이렇게 할 수 있습니다.
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
...하지만 컬렉션에 원하는 개체가 이미있을 때 불필요한 추가 쿼리를 수행하기 때문에 훨씬 더 복잡 합니다 $foods
.
모든 안내에 미리 감사드립니다.
편집하다:
명확하게 말하면 다른 쿼리를 생성하지 않고 Illuminate 컬렉션을 호출 할 수->find()
있지만 기본 ID 만 허용합니다. 예를 들면 :
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
그러나 다음과 같이 컬렉션의 속성으로 요소를 가져 오는 깔끔한 (비 루핑, 비 쿼리) 방법은 아직 없습니다.
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(