CakePHP - 根据孩子查找父母

时间:2012-09-20 22:14:35

标签: php mysql cakephp

我有三个公司,产品和价格表。

Companies hasMany Products
Products hasMany Prices

我目前正在尝试在这些表中搜索价格低于某个价格的产品,我正在尝试的代码是:

$results = $this->Product->find('all', array(
    'conditions' => array(
        'Price.price <=' 10
    )
));

由于某种原因使用此代码cakephp,这会带来错误:

Unknown column 'Price.price' in 'where clause'

我认为这是因为产品有多种价格(它加入公司表而不是价格表),谁能告诉我为什么会出错并且知道如何让它运转?

注意:完成此工作后,我希望能够根据价格和产品表中的条件查找产品,然后在结果页面中显示所有3个数据。

我想先搜索价格表然后搜索产品表,但我相信一定有更有效的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以对这些类型的查询使用adhoc-joins。 Cake不会为1:n或n:n关系进行连接,因此您必须手动指定它。

$results = $this->Product->find('all', array(
    'joins' => array(
        array(
            'alias' => 'Price',
            'table' => 'prices',
            'foreignKey' => false,
            'conditions' => array('Price.product_id = Product.id'),
        ),
    ),
    'conditions' => array(
        'Price.price <=' => 10,
    ),
));

答案 1 :(得分:2)

在你的位置我会这样做:

$results = $this->Product->Price->find('all', array(
    'recursive' => 2,
    'conditions' => array(
        'Price.price <=' => 10
    )
));

HasMany不会加入表,但belongsTo会加入。