<code>$room=\App\Model\Room::with(['items'=>function($query){ $query->take(12); }])->get();</code>
위 코드의 각 방 아래 항목이 비어 있습니다. $query->take(12);
을 주석 처리하면 항목이 다시 나타납니다.
<code>$room=\App\Model\Room::with(['items'=>function($query){ $query->take(12); }])->get();</code>
위 코드의 각 방 아래 항목이 비어 있습니다. $query->take(12);
을 주석 처리하면 해당 항목이 다시 나타납니다.
흠... 사실 이유는 매우 간단합니다. dd()
을 추가하면 생성된 SQL
을 볼 수 있습니다.
<code class="php">$room = \App\Model\Room::with(['items' => function($query){ dd($query->take(12)->toSql()); }])->get();</code>
은 다음 SQL
을 생성합니다. (? 숫자는 Room
이 몇 개 있는지 나타냅니다.)
<code class="sql">select * from `machines` where `machines`.`series_id` in (?, ?, ?) limit 12</code>
실제로 take
, limit
등의 제한사항을 추가하면 每一筆
에 대한 제한사항이 아니라, 획득한 모든 관련 데이터에 대한 제한사항임을 알 수 있습니다. Room
의 일부에 Item
이 없는 경우 이 숫자를 100000
과 같이 큰 값으로 설정할 수 있으며, 한도가 다음과 같기 때문에 items
에 데이터가 있음을 알 수 있습니다. 데이터의 양보다 더 많습니다.
각 거래의 관련 데이터를 제한하는 방법에 대해 몇 가지 정보를 찾았지만 현재 가장 신뢰할 수 있는 방법은 다음과 같습니다.
Eloquent 관계 조정 – 부모당 N개의 관련 모델을 얻는 방법 ?
무슨 뜻인지 이해하지 못함 $room=AppModelRoom::with('items')->take(12);
분명히 일치하는 항목이 없었습니다.
모두 연관 모델의 abstract public function addEagerConstraints(array $models)
방식을 통해 구현됩니다.
이유는 with
에 있는 연관 데이터 테이블의 쿼리를 통해 제공된 데이터가 얻은 모델 데이터와 일치하지 않아 쿼리 결과가 나오지 않기 때문임을 알 수 있습니다.