0

CakePHP アプリケーションには、2 つのテーブルがあります。

  • イベント
  • event_dates

イベント テーブル イベント テーブル

event_dates テーブル event_dates テーブル

対応する 1 つの日付で各イベントを選択します。その日付は、現在の日付に最も近い日付になります。

つまり、event_datesテーブルにはevent_id1 に対して 4 つのイベントの日付があります (event_idは外部キーです)。start_date = 2013-09-21次に、これが現在の日付に最も近い日付であるため、イベント 1 の行を 1 つ選択します。

これどうやってするの?

これは私のコードです:

$events = $this->Event->find('all');

ただし、上記では、イベント レコードが重複しているすべての日付が取得されます。

4

2 に答える 2

1

サブ結果の存在によってメイン結果を制限したい場合は、JOIN を使用する必要があります。このようなもので、データの順序を設定することもできます。これは単なるアイデアです。必要に応じて変更してください。

$options['joins'] = array(
    array('table' => 'event_dates',
          'alias' => 'EventDate',
          'type' => 'INNER',
          'conditions' => array(
                'EventDate.event_id = Event.id'
                'EventDate.start_date <' => date('Y-m-d H:i:s')
                 )
            )
        );

$options['fields'] = array('Event.id', 'Event.name', 'Event.address');

$events = $this->Event->find('all', $options);

詳細については、http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tablesを確認してください。

于 2013-09-20T06:32:28.910 に答える