当我有 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],
];