2

我有两个表:product并且document两者都与document_id有关。

现在我想product_id使用 Yii CDbCriteria 从数据库中获取文档名称。

喜欢 :

SELECT d.* 
FROM `document` As d, `product_document` AS p 
WHERE d.document_id=p.document_id
AND
p.product_id=133;

我想编写相同的查询,但使用CDbCriteria. 我已经尝试过了,但我被它的语法卡住了。

4

2 回答 2

5

Harry 有正确的语法。如果你想让它在整个应用程序中更清洁、更可重用,请考虑使用命名范围:

/* 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);
}

随着时间的推移,使您的设置更加可重用......

于 2013-08-26T17:19:01.727 回答
2

这是您的标准,假设您已正确设置关系:

$c = Document::model()->getDbCriteria();
$c->with[] = 'product';
$c->addCondition('product.product_id = :product_id');
$c->params[':product_id'] = 133;
于 2013-08-26T15:57:10.960 回答