Модель: применить условие к операторам соединения - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу добавить некоторые условия при объединении модели.

это то, что я пытался, и ничего не изменилось в результате:

    Members::find('all', [
        'fields' => ['name', 'Count(Orders.id)'],
        'with' => 'Orders',
        // 'joins' => [
        //  'Orders' => 'Orders.status = delivered'
        // ]
    ]);

это мой рабочий пример запроса:

SELECT name, COUNT(orders.id) FROM members
LEFT JOIN orders ON orders.member_id = members.id AND orders.status = 'delivered'
GROUP BY member_id

Редактировать:

Я также попробовал этот подход на основе этого ответа

$joins = array();
$joins[] = new \lithium\data\model\Query(array(
     'source' => 'orders',
     'type' => 'LEFT',
     'constraint' => array('Orders.status' => 'delivered'),
));


Members::find('all', [
    'fields' => ['name', 'Count(Orders.id)'],
    'with' => 'Orders',
    'joins' => $joins
]);

но созданный запрос не содержит определенных параметров соединений ('Orders.status' => 'доставлено')

1 Ответ

0 голосов
/ 16 октября 2018

То, что вы пытаетесь сделать, концептуально неправильно. Пожалуйста, попробуйте указать status = 'delivered' в предложении where запроса. Для получения дополнительной информации читайте ниже:

Несмотря на то, что написанный вами запрос имеет смысл при чтении и (может) дать одинаковые результаты, вы смешиваете join clause и where clause.

  • Join clause должен содержать условия, которые необходимы для "объединения" двух записей (то есть одно и то же имя, одно и то же имя и фамилия, одна и та же марка и модель и т. Д.)

  • Where clause должен содержать условия, необходимые для возврата только тех записей, которые удовлетворяют условиям. Эти записи могут быть из одной таблицы (обычно) или из нескольких таблиц (в случае объединений).

...