当我有 3 个表时,我如何设法使用 "addCondition" (Yii1)
How do I manage to use "addCondition" (Yii1) when i have 3 tables
嗯,我有 3 个 table:产品、商店和快讯。
Table 警报有 product_id,table 产品有 store_id。我建立了一个模型关系,所以我可以获得一个包含 3.
数据的数组
问题是,我需要添加一个条件,它只会 return 提醒,其中 client_id(在 table 商店)等于客户端的 ID访问数据。
$clientidx = $clientlist->idx;
$criteria = new CDbCriteria();
$criteria->with = 'product';
$criteria->with = 'product.store';
$criteria->addCondition('product.store.client_idx = :client_idx');
$criteria->params[':client_idx'] = $clientidx;
$openalerts = Openalert::model()->findAll($criteria);
为什么我不能让条件看到product.store.client_idx
?
在这种情况下,您不应使用关系别名 (product.store
),而应使用 table 别名。如果要在 store
table 中为 client_idx
列添加条件,则需要:
$criteria->addCondition('store.client_idx = :client_idx');
还有这个:
$criteria->with = 'product';
$criteria->with = 'product.store';
$criteria->with = 'product'
没有效果,因为您将立即覆盖此 属性。如果要设置多个关系,则需要将数组传递给$with
。 ['together' => true]
还将确保为查询创建正确的 JOIN,因此您的条件将正常工作:
$criteria->with = [
'product',
'product.store' => ['together' => true],
];
嗯,我有 3 个 table:产品、商店和快讯。 Table 警报有 product_id,table 产品有 store_id。我建立了一个模型关系,所以我可以获得一个包含 3.
数据的数组问题是,我需要添加一个条件,它只会 return 提醒,其中 client_id(在 table 商店)等于客户端的 ID访问数据。
$clientidx = $clientlist->idx;
$criteria = new CDbCriteria();
$criteria->with = 'product';
$criteria->with = 'product.store';
$criteria->addCondition('product.store.client_idx = :client_idx');
$criteria->params[':client_idx'] = $clientidx;
$openalerts = Openalert::model()->findAll($criteria);
为什么我不能让条件看到product.store.client_idx
?
在这种情况下,您不应使用关系别名 (product.store
),而应使用 table 别名。如果要在 store
table 中为 client_idx
列添加条件,则需要:
$criteria->addCondition('store.client_idx = :client_idx');
还有这个:
$criteria->with = 'product'; $criteria->with = 'product.store';
$criteria->with = 'product'
没有效果,因为您将立即覆盖此 属性。如果要设置多个关系,则需要将数组传递给$with
。 ['together' => true]
还将确保为查询创建正确的 JOIN,因此您的条件将正常工作:
$criteria->with = [
'product',
'product.store' => ['together' => true],
];