使用“查找”使用基于相关模型的条件返回值

时间:2012-02-14 13:49:15

标签: php cakephp model

我有公司模型,该模型与 MonthlyReturn 模型相关。一家公司可以有很多MonthlyReturns。我正在努力获得所有在指定月份都有月度回报的公司。

我使用的代码如下:

$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 :(得分:0)

您的代码说,您要求的是特定日期,而不是一个月。

试试这个:

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

答案 1 :(得分:0)

我不确定是否有更好的方法,但你可以在两个这样的调用中完成:

$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")
    )
)));

这是个主意,但可能需要进行一些调试