> 백엔드 개발 > PHP 튜토리얼 > laravel5.2 테이크에 대한 질문

laravel5.2 테이크에 대한 질문

WBOY
풀어 주다: 2016-08-04 09:20:06
원래의
1569명이 탐색했습니다.

<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에 있는 연관 데이터 테이블의 쿼리를 통해 제공된 데이터가 얻은 모델 데이터와 일치하지 않아 쿼리 결과가 나오지 않기 때문임을 알 수 있습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿