2017-03-16 3 views
0

에서 동적 값과 같은 경우 쿼리 조건을 만드는 방법 :필드를 비교하는이 같은 쿼리를 만들려고 해요 CakePHP의 3

$spreadsheet = $this->Spreadsheets->get($id, [ 
     'contain' => [ 
      'SpreadsheetTypes.CentersTypes' => function ($q) { 
       return $q->matching('Centers', function ($q) { 
        return $q->where(['Centers.id' => 5]); 
       })->contain(['Items']); 
      } 
     ] 
    ]); 

$ ID 값을 매개 변수로 전달됩니다. 하지만 변경해야합니다

return $q->where(['Centers.id' => 5]) 

이 쿼리에서 'Centers.id'와 center_id 값을 비교해야하기 때문에 변경해야합니다. 즉, 스프레드 시트에는 center_id 필드가 있으므로이 스프레드 시트와 비교해야합니다. 아이디어가 있으십니까?

+0

이 하나가 정확히 you'are을 요청하는 것을 이해하면, 그 질문에 대답하기가 상대적으로 쉬운 반면,인지 구별하기 어렵다 당신의 연관성 유형과 그 질의의 의도가 알려지지 않았기 때문에 실제로 작동 할 것입니다. 표시중인 쿼리에서 모든 컨테이너가 1 : 1 또는 n : 1 연결 인 경우에만 이러한 비교가 작동합니다. – ndm

+0

연관 정보에 더하여, 봉쇄를 사용하는 이유, 즉 실제로 해당 데이터를 포함하기를 원하는지 또는 이러한 연관을 기준으로 필터링하려고하는지 여부를 언급하는 경우 도움이됩니다. – ndm

답변

0

추가 "사용"기능 ($ q를)

exemple 후

return $q->matching('Centers', function ($q) use($foo) { 
        return $q->where(['Centers.id' => $foo]); 
       })->co 
+0

안녕하세요! 내가받을 스프레드 시트의 center_id와 비교하려고하기 때문에 문제가 해결되지 않습니다 ... 지금이 순간에 값을 모르겠습니다. –

+0

포함 된 $ id를 전달하려고 시도 했습니까? 너무? 이 $ 스프레드 시트 = $ this-> Spreadsheets->의 get ($ ID로, [ 는 { 반환 $ q를 => [ 'SpreadsheetTypes.CentersTypes'=> 기능 ($ q를) 사용 ($ id를) '포함' ([ 'Centers.id'=> $ id]); }) -> contains ([ 'Items ('Centers.id '=> $ id]) -> 일치 ('센터 ', 함수 ($ q) 사용 ($ id) { 반환 $ q-> ']); } ] ]); – Gransfall