2011-07-07 2 views
0

映画を見るときに、劇場主催の上演時間(movie_timesテーブル)を表示します。私はちょうど罰金、すべてのデータを取得することができますが、それはこのようなEVERY MovieTimeとシアターデータを返します:劇場でグループ化された映画の上映時間を取得する:ムービー - >上映時間<CakePHPの-Theater

[0] => 
    [Movie] => 
     [name] => Herp de Derp 
    [MovieTime] => 
     [0] => 
      [datetime] => 2011-07-06 18:30:00 
      [Theater] => 
       [name] => Awesome Cinemas 
       [address] => 1234 Street Ln 
     [1] => 
      [datetime] => 2011-07-06 20:30:00 
      [Theater] => 
       [name] => Awesome Cinemas 
       [address] => 1234 Street Ln 
     [2] => 
      [datetime] => 2011-07-06 20:30:00 
      [Theater] => 
       [name] => Crappy Movies 10 
       [address] => 678 Avenue St 

あなたが想像できるように、劇場用データとの重複のTONがあります。

私はこの同じデータを取得することができます方法はありますが、その代わりに、このようなことの中movie_timesでグループ化された劇場用データが

[0] => 
    [Movie] => 
     [name] => Herp de Derp 
    [Theater] => 
     [0] => 
      [name] => Awesome Cinemas 
      [address] => 1234 Street Ln 
      [MovieTime] => 
       [0] => 
        [datetime] => 2011-07-06 18:30:00 
       [1] => 
        [datetime] => 2011-07-06 20:30:00 
       [2] => 
        [datetime] => 2011-07-06 22:30:00 

     [1] => 
      [name] => Awesome Cinemas 
      [address] => 1234 Street Ln 

を?:取得私の団体は、以下の通りである:

Movie hasMany MovieTime 
MovieTime belongsTo Movie 

Theater hasMany MovieTime 
MovieTime belongsTo Theater 

ご覧のとおり、映画と劇場の間には直接のリンクはありません。MovieTimeを使用しています。アソシエーションは(私にとっては少なくとも)論理的に意味がありますが、それらを別の(しかし論理的な)設定に変更しなければならないと、私は確かにそれを聞いています。

私は現在、私のデータを取得するために、これを使用しています:

 $data = $this->find("first", array(
      'conditions' => array(
       array('Movie.slug' => $slug) 
      ), 
      'fields' => array('id', 'name', 'slug', 'url', 'runtime'), 
      'contain' => array(
       'MovieTime' => array(
        'fields' => array('datetime', 'screen_number'), 
        'Theater' => array(
         'fields' => array('id', 'slug', 'name', 'address', 'phone'), 
         'City' => array(
          'fields' => array('id', 'name', 'st') 
         ), 
        ), 
       ), 
      ), 
     ) 
    ); 

答えて

0

は、GROUP BYを試してみてください。 'group' => 'ここにModel.Idを入れる'を追加するだけです。

これを試してみてください:

$data = $this->find("first", array(
      'conditions' => array(
       array('Movie.slug' => $slug) 
      ), 
      'fields' => array('id', 'name', 'slug', 'url', 'runtime'), 
      'contain' => array(
       'MovieTime' => array(
        'fields' => array('datetime', 'screen_number'), 
        'group' => 'Theater.id', 
        'Theater' => array(
         'fields' => array('id', 'slug', 'name', 'address', 'phone'), 
        'City' => array(
         'fields' => array('id', 'name', 'st') 
        ), 
        ), 
       ), 
      ), 
     ), 
    ); 

は、詳細については、この2つのリンクをチェックしてください。私はそれを行うとき

+0

、私が手:U nknown列 'field.id' in 'field list' – Dave

+0

劇場は私のモデル名で、idは主キーです。私はMovieTime.idでグループ化したくないです - それは私が望むものの反対です。 – Dave

+0

私は最初の答えを変えて、それを試してみてください。 –

関連する問題