2017-02-02 1 views
1

현재 CakePHP find ('all') 함수를 사용하여 데이터베이스에서 여러 필드를 검색하고 있습니다. 나는 'fields'=> array ('Model.Field')를 사용하여 반환되는 필드의 수를 제한하는 방법을 알고있다. 그러나이 함수는 현재 다음과 같은 데이터를 반환하고 있습니다.CakePHP 배열 내 필드 찾기

array (size=1) 
    0 => 
     'Model' => 
     array (size=1) 
      0 => 
      array (size=8) 
       'Field1' => string 'value' 
       'Field2' => string 'value' 
       'Field3' => string 'value' 
       'Field4' => string 'value' 
       'Field5' => string 'value' 
       'Field6' => string 'value' 
       'Field7' => string 'value' 
       'Field8' => string 'value' 

이 필드 중 일부만 반환하고 싶습니다. 이 구문을 찾을 수 없습니다. 나는 다음과 같은 옵션 시도 :

'Model.Field1' (returns false) 
'Model.0.Field1' (returns false) 
'Model.[0].Field1' (returns false) 
'Model' => 0 => 'Field1' (invalid syntax) 
'Model' => '0.Field1' (returns false) 

찾기 기능이 할 수있는 방법이 있나요를, 또는 더 나은 오프 그냥 내 자신의 SQL 쿼리를 쓰고 있어요?

편집 : 여기의 요청에 따라 찾기 기능입니다 - 이것은 현재 그들이 부분 배열 내에서 값을 반환하지 않는 모델 1과 모델 2의 결과를 제한 잘 작동

$this->Model1->find('all', array(
       'conditions' => $conditions, 
       'restrict' => array('Model1', 'Model2', 'Model3', 'Model4'), 
       'fields' => array('Model1.Field1', 'Model1.Field2', 'Model1.Field3', 'Model1.Field4', 'Model1.Field5', 'Model1.Field6', 'Model1.Field7', 
        'Model2.Field1', 'Model2.Field2', 'Model2.Field3', 'Model2.contract_id', 'Model2.Field4') 
      )); 

가. 위에서 언급 한 것처럼 Model3과 Model4에 대해 동일한 구문을 사용하면 작동하지 않습니다. 여기가 "포함"옵션을 사용하려고 노력 무엇 :

$this->Model1->find('all', array(
       'conditions' => $conditions, 
       'restrict' => array('Model1', 'Model2', 'Model3', 'Model4'), 
       'fields' => array('Model1.Field1', 'Model1.Field2', 'Model1.Field3', 'Model1.Field4', 'Model1.Field5', 'Model1.Field6', 'Model1.Field7', 
        'Model2.Field1', 'Model2.Field2', 'Model2.Field3', 'Model2.contract_id', 'Model2.Field4'), 
       'contain' => array(
        'Model3' => array(
         'fields' => array(
          'Field1', 
          'Field2', 
          'Field3', 
          'Field4', 
          'Field5', 
         ) 
        ) 
       ) 
      )); 
+0

당신은'전체 찾을 게시물 수 ('모든') ' – bill

답변

0

당신은 귀하의 질문에 언급과 같이 필드의 find('all')에 반환을 지정 할 수 있어야한다. Model는 관련 모델 인 경우

$this->find('all', array(
    'fields' => array(
     'Model.Field1', 
     'Model.Field2', 
     // etc 
    ) 
)); 

, 당신은 ContainableBehavior를 사용하여 필드를 지정할 수 있습니다.

$this->find('all', array(
    'contain' => array(
     'Model' => array(
      'fields' => array(
       'Field1', 
       'Field2', // etc 
      ) 
     ) 
    ) 
)); 

containable docs

+0

난 당신이 Model3 및 Model4에 대한 두 번째 블록에서 언급 접근을하고했지만, 여전히 모든 값을 반환하는 대신 단지 지정된 필드. – user6679670