我有两个表:product
和document
,两者都与document_id有关。
现在我想使用Yii CDbCriteria从数据库中获取product_id
的文档名称。
喜欢:
SELECT d.*
FROM `document` As d, `product_document` AS p
WHERE d.document_id=p.document_id
AND
p.product_id=133;
我想使用CDbCriteria
编写相同的查询。我已经尝试过了,但我的语法却被卡住了。
答案 0 :(得分:5)
哈利有正确的语法。如果您想在整个应用程序中使其更清晰,更可重复使用,请考虑使用命名范围:
/* scope in your Document model */
public function forProductId($id) {
$criteria = new CDbCriteria();
$criteria->condition = 'product.id = :productId',
$criteria->with = 'product';
$criteria->params = array(
':productId' => (int)$id,
);
return $this->dbCriteria()->mergeWith($criteria);
}
随着时间的推移,您的设置可以更加重复使用......
答案 1 :(得分:2)
这是您的标准,假设您已正确设置关系:
$c = Document::model()->getDbCriteria();
$c->with[] = 'product';
$c->addCondition('product.product_id = :product_id');
$c->params[':product_id'] = 133;