Условия Find () с глубокими ассоциациями с использованием Containable - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть следующие три модели Product, Order, OrderDetail.

Product имеет следующую ассоциацию:

public $hasMany = array('OrderDetail');

Order имеет следующееассоциация:

public $hasMany = array('OrderDetail');

OrderDetail имеет следующие ассоциации:

public $belongsTo = array('Order');
public $belongsTo = array('Product');

Я использую поведение Containable и хочу find() Продукты.

Как я могу использовать поле из модели Order в части условий вызова find ()?

Что-то подобное в моей Product модели:

$this->find('all', array('
    conditions' => array(
        'Order.order_date' => '2011-09-12'
    )
));

Ответы [ 3 ]

0 голосов
/ 11 ноября 2011

Сначала объедините массив $ ownTo с

public $belongsTo = array('Order', 'Product');

и попробуйте снова

0 голосов
/ 11 ноября 2011

Вы не можете достичь того, что вы хотите, таким образом.Если вы посмотрите на запросы Cake, вы поймете почему.Containable выполняет несколько запросов, а затем собирает их.

Самый простой способ получить то, что вам нужно, - выполнить запрос с точки зрения модели заказа, поскольку вы фильтруете модель.Если это не вариант, см .:

Смотрите некоторые способы сделать это здесь

0 голосов
/ 10 ноября 2011

Используйте индекс содержать , чтобы указать модель Заказ и соответствующие условия. Убедитесь, что вы используете сдерживаемое поведение в модели Product .

$this->find('all', array(
  'contain' => array(
    'Order' => array(
      'conditions' => array(
        'Order.order_date' => '2011-09-12'
      )
    )
  ),
));

Кроме того, вы можете посмотреть на ваши модельные отношения. Я думаю, что вы, возможно, указали их неправильно в вопросе.

...