2017-08-25 3 views
0

インデックスがレコードIDであるレコードを取得することは可能ですか?Cakephp 2は、データを取得するときにレコードのidをインデックスとして使用します。

私はhasMany関係を持つモデルを持っています。だから私の研究では、複数のテキストや質問など

を持つことができるカスタム関数を取得し、次のようになります

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 
を:あなたは、私は結果は次のようになり収容可能 を使用しています見ることができるように

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; 
} 

しかし、テキストと質問のインデックスをidsにします。このように:

'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の驚くべきメソッドを使用することができます。

のようなもの:これは、コードをテストしたが、私はそれが正しい(あるいは少なくとも近い)だと信じていない

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

、あなたはここからアイデアを得る必要があります。 Hash::combine

注:

が値を取得するためのパスとしてその キーを構築するためのパスとして$キーパスを使用して連想配列を作成し、必要に応じて$ valuePathに。 $ valuePathが指定されていないか、または何も一致しない場合、値は にnullに初期化されます。オプションで、$ groupPathで指定されたパスの後に取得された値を でグループ化することができます。

ハッシュ::コンバイン(配列$データ、$キーパス、$ valuePathに= NULL、$ groupPath = ヌル)

+1

それは正しかったあなたの最後の編集前に、 '$のresults'を変更する必要があるものです私はコーヒーの不足を非難します); – ndm

+0

ありがとうございました!これはうまくいくが、すべての結果を繰り返す必要があります。モデルやコンテナ内でこれを定義するようなものはありませんか? –

関連する問題