我有三个公司,产品和价格表。
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个数据。
我想先搜索价格表然后搜索产品表,但我相信一定有更有效的方法吗?
答案 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会加入。