簡體   English   中英

Yii Model-> search()標准與MANY_MANY關系進行比較

[英]Yii Model->search() criteria compare with MANY_MANY relation

我有三張桌子:

在此輸入圖像描述

以及其中兩個的模型有很多關系

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返回DB錯誤:

CDbCommand無法執行SQL語句:SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'mtypes.id'。 執行的SQL語句是:

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

我明白,表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,
    ),
));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM