当我有3个表时,我如何使用“addCondition”(Yii1)

nszi6y05  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(172)

我有三张table产品、商店和警报。表警报具有product_id,表产品具有store_id。我创建了一个模型关系,以便可以获得包含这3个数据的数组。
问题是,我需要添加一个条件,使它只返回client_id(在表Stores上)等于试图访问数据的客户机的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

jv2fixgn

jv2fixgn1#

在条件中不应使用关系别名(product.store),而应使用表别名。如果要为store表中的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],
];

相关问题