2017-08-25 29 views
0

是否可以檢索索引是記錄標識的記錄?Cakephp 2在檢索數據時使用記錄的id作爲索引

我有hasMany關係的模型。所以,我的研究可以有多個文本和問題等

自定義檢索功能如下:

protected function _findStudyWithSequence($state, $query, $results=array()){ 
    if ($state === 'before') { 
     $query['contain'] = array(
      'SubjectFilter'=>array('fields'=>'SubjectFilter.studyCode'), 
      'Text'=>array('fields'=>'Text.position,Text.id,Text.text','order'=>array('position')), 
      'Image'=>array('fields'=>'Image.position, Image.id','order'=>array('position')), 
      'Video'=>array('fields'=>'Video.position, Video.id','order'=>array('position')), 
      'Web'=>array('fields'=>'Web.position, Web.id','order'=>array('position')), 
      'Likert'=>array('fields'=>'Likert.position, Likert.id','order'=>array('position')), 
      'Question'=>array('fields'=>'Question.position, Question.id','order'=>array('position')), 
      'Star'=>array('fields'=>'Star.position, Star.id','order'=>array('position')), 
      'Multiple_choice'=>array('fields'=>'Multiple_choice.position, Multiple_choice.id','order'=>array('position')) 
     ); 
     $query['recursive']=-1; 
     $query['order']=array('Study.started DESC'); 
     $query['fields']=array(
        'Study.id', 'Study.user_id','Study.title','Study.description','Study.numberParticipants','Study.state','Study.created','Study.modified','Study.started','Study.completed','Study.numberParticipants'); 

     return $query; 
    } 

    } 
    return $results; 
} 

正如你可以看到我使用中可容納 結果是這樣的:

array(
'Study' => array(
    'id' => '1845346986', 
    'user_id' => '1402402538', 
    'title' => 'bla bla', 
    'description' => '', 
    'numberParticipants' => '10', 
    'state' => 'active', 
    'created' => '2017-08-21 14:06:11', 
    'modified' => '2017-08-21 14:29:56', 
    'started' => '2017-08-21 14:30:06', 
    'completed' => '0000-00-00 00:00:00', 
), 
'SubjectFilter' => array(
    'studyCode' => null 
), 
'Text' => array(
    (int) 0 => array(
     'position' => '0', 
     'id' => '1423909242', 
     'text' => '<p>Bla <b>bla </b></p><p>blub</p><p><br /></p>', 
     'study_id' => '1845346986' 
    ) 
), 
'Question' => array(
    (int) 0 => array(
     'position' => '4', 
     'id' => '729521908', 
     'study_id' => '1845346986' 
    ) 
), etc 

但我希望文本和問題索引是ID。像這樣:

'Text' => array(
    (int) 1423909242 => array(
     'position' => '0', 
     'id' => '1423909242', 
     'text' => '<p>Bla <b>bla </b></p><p>blub</p><p><br /></p>', 
     'study_id' => '1845346986' 
    ) 
), 

我該如何管理?

回答

2

您可以使用CakePHP的驚人Hash::combine()方法。

喜歡的東西:

$results['Text'] = Hash::combine($results['Text'], '{n}.id', '{n}'); 
$results['Question'] = Hash::combine($results['Question'], '{n}.id', '{n}'); 
return $results; 

它沒有經過測試的代碼,但我相信這是正確的(或至少接近),你應該從這裏得到的想法。上Hash::combine

注:

創建使用$的keyPath作爲路徑建立其 鍵關聯數組,以及任選$ valuePath作爲路徑來獲得的值。如果沒有指定 $ valuePath,或者不匹配任何內容,則值將被初始化爲空的 。您可以選擇按照在$ groupPath中指定的路徑後獲得的 獲得的值對這些值進行分組。

哈希::結合(數組$數據,$的keyPath,$ valuePath = NULL,$ groupPath = 空)

+1

它是正確的上次編輯之前,'$ results'是需要修改什麼,也就是'after'查找數據;) – ndm

+0

@ndm謝謝,回覆(當然是,我會責怪缺少咖啡);) – Dave

+0

謝謝你的回答!這將工作,但它需要通過所有結果迭代,對吧?有沒有像在模型或容器中定義這樣的東西? –