Использование Find для возврата значений с использованием условия на основе связанной модели - PullRequest
1 голос
/ 14 февраля 2012

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

Я использую следующий код:

$this->Company->find('all', array('contain' => array(
    'MonthlyReturn' => array(
        'conditions' => array('MonthlyReturn.month' => "2012-01-01")
    )
)));

Модель компании:

public $hasMany = array(
        'Employee' => array(
            'className' => 'Employee',
            'foreignKey' => 'company_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'MonthlyReturn' => array(
            'className' => 'MonthlyReturn',
            'foreignKey' => 'company_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

    public $hasOne = 'Umuser';

}

Этот код возвращает все компании, а не компании с возвратом за месяц.Поле 'MonthlyReturn.month' всегда будет в указанном выше формате, т. Е. Год и месяц будут меняться, но всегда будут 1-го числа месяца.

Любой совет приветствуется.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2012

Я не уверен, что есть лучший способ, но вы можете сделать это в два вызова, как это:

$company_ids = $this->MonthlyReturn->query("SELECT DISTINCT company_id FROM monthy_returns WHERE month = '2012-01-01';")

$this->Company->find('all', array(
    'conditions' => array('Company.id' => $company_ids[0]),
    'contain' => array('MonthlyReturn' => array(
        'conditions' => array('MonthlyReturn.month' => "2012-01-01")
    )
)));

Это идея, но может потребоваться некоторая отладка

0 голосов
/ 14 февраля 2012

ваш код говорит, что вы спрашиваете конкретную дату, а не месяц.

попробуйте это:

$this->Company->find('all', array('contain' => array(
'MonthlyReturn' => array(
    'conditions' => array('MonthlyReturn.month LIKE' => "2012-01%")
))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...