如何解决当我有3个表时如何管理“ addCondition”Yii1
好吧,我有3个表:产品,商店和警报。 表警报具有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
?
解决方法
在这种情况下,您不应使用关系别名(product.store
),而应使用表别名。如果要为client_idx
表中的store
列添加条件,则需要:
$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],];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。