Yii Model->search() 条件与 MANY_MANY 关系比较
Yii Model->search() criteria compare with MANY_MANY relation
我有三个table:
以及其中两个具有多对多关系的模型
tbl_social_messages_list:
return array(
'service' => array(self::BELONGS_TO, 'SocialServices', 'service_id'),
'mtypes' => array(self::MANY_MANY, 'SocialMessageTypes', 'tbl_social_messages_mtypes_relation(m_id, t_id)' ),
);
tbl_social_message_types
return array(
'messages' => array(self::MANY_MANY, 'SocialMessages', 'tbl_social_messages_mtypes_relation(t_id, m_id)' ),
);
我正在尝试使用带有 tbl_social_message_types.id 的下拉菜单进行网格过滤以进行比较。
我的搜索:
$criteria=new CDbCriteria;
$criteria->compare('mtypes.id', $this->mType);
$criteria->compare('t.id',$this->id);
$criteria->compare('t.service_id',$this->service_id);
$criteria->compare('t.title',$this->title,true);
$criteria->compare('t.comment',$this->comment,true);
$criteria->compare('t.category_id',$this->category_id,true);
$criteria->with = array('service', 'mtypes');
$criteria->order = 't.id DESC';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>50,
),
));
但是当我发出请求(更改过滤器字段)时,Yii returns 我的数据库错误:
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'mtypes.id' in 'where clause'. The SQL statement executed was:
SELECT `t`.`id` AS `t0_c0`, `t`.`service_id` AS `t0_c1`, `t`.`category_id` AS `t0_c2`, `t`.`title` AS `t0_c3`, `t`.`comment` AS `t0_c4` FROM `tbl_social_messages_list` `t` WHERE (mtypes.id=:ycp0) ORDER BY t.id DESC LIMIT 50
我知道 table mtypes 不存在,但我不明白 - 为什么会这样。
尝试将 with
个标准放在首位:
$criteria = new CDbCriteria;
$criteria->with = array('service', 'mtypes');
$criteria->compare('mtypes.id', $this->mType);
$criteria->compare('t.id', $this->id);
$criteria->compare('t.service_id', $this->service_id);
$criteria->compare('t.title', $this->title, true);
$criteria->compare('t.comment', $this->comment, true);
$criteria->compare('t.category_id', $this->category_id, true);
$criteria->order = 't.id DESC';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>50,
),
));
如果它不起作用,有时 Yii 需要 'together' => true 参数。
$criteria = new CDbCriteria;
$criteria->with = array('service' => array('together' => true),
'mtypes' => array('together' => true));
$criteria->compare('mtypes.id', $this->mType);
$criteria->compare('t.id', $this->id);
$criteria->compare('t.service_id', $this->service_id);
$criteria->compare('t.title', $this->title, true);
$criteria->compare('t.comment', $this->comment, true);
$criteria->compare('t.category_id', $this->category_id, true);
$criteria->order = 't.id DESC';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>50,
),
));
我有三个table:
以及其中两个具有多对多关系的模型
tbl_social_messages_list:
return array(
'service' => array(self::BELONGS_TO, 'SocialServices', 'service_id'),
'mtypes' => array(self::MANY_MANY, 'SocialMessageTypes', 'tbl_social_messages_mtypes_relation(m_id, t_id)' ),
);
tbl_social_message_types
return array(
'messages' => array(self::MANY_MANY, 'SocialMessages', 'tbl_social_messages_mtypes_relation(t_id, m_id)' ),
);
我正在尝试使用带有 tbl_social_message_types.id 的下拉菜单进行网格过滤以进行比较。
我的搜索:
$criteria=new CDbCriteria;
$criteria->compare('mtypes.id', $this->mType);
$criteria->compare('t.id',$this->id);
$criteria->compare('t.service_id',$this->service_id);
$criteria->compare('t.title',$this->title,true);
$criteria->compare('t.comment',$this->comment,true);
$criteria->compare('t.category_id',$this->category_id,true);
$criteria->with = array('service', 'mtypes');
$criteria->order = 't.id DESC';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>50,
),
));
但是当我发出请求(更改过滤器字段)时,Yii returns 我的数据库错误:
CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'mtypes.id' in 'where clause'. The SQL statement executed was:
SELECT `t`.`id` AS `t0_c0`, `t`.`service_id` AS `t0_c1`, `t`.`category_id` AS `t0_c2`, `t`.`title` AS `t0_c3`, `t`.`comment` AS `t0_c4` FROM `tbl_social_messages_list` `t` WHERE (mtypes.id=:ycp0) ORDER BY t.id DESC LIMIT 50
我知道 table mtypes 不存在,但我不明白 - 为什么会这样。
尝试将 with
个标准放在首位:
$criteria = new CDbCriteria;
$criteria->with = array('service', 'mtypes');
$criteria->compare('mtypes.id', $this->mType);
$criteria->compare('t.id', $this->id);
$criteria->compare('t.service_id', $this->service_id);
$criteria->compare('t.title', $this->title, true);
$criteria->compare('t.comment', $this->comment, true);
$criteria->compare('t.category_id', $this->category_id, true);
$criteria->order = 't.id DESC';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>50,
),
));
如果它不起作用,有时 Yii 需要 'together' => true 参数。
$criteria = new CDbCriteria;
$criteria->with = array('service' => array('together' => true),
'mtypes' => array('together' => true));
$criteria->compare('mtypes.id', $this->mType);
$criteria->compare('t.id', $this->id);
$criteria->compare('t.service_id', $this->service_id);
$criteria->compare('t.title', $this->title, true);
$criteria->compare('t.comment', $this->comment, true);
$criteria->compare('t.category_id', $this->category_id, true);
$criteria->order = 't.id DESC';
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>50,
),
));