【问题标题】:Yii: working with multiple tablesYii:处理多个表
【发布时间】:2013-09-15 15:48:28
【问题描述】:

尝试执行此查询:

SELECT md.title, md.url 
   FROM MenuData md, Menu m 
   WHERE m.parent=0 
      AND m.menuType=1 
      AND md.menuID = m.id 
  ORDER BY m.sort ASC

如下:

  $criteria = new CDbCriteria();
            $criteria->together = true;
            $criteria->with = array('MenuData');
            $criteria->compare("Menu.menuType", 1);
            $criteria->compare("Menu.parent", 0);
            $criteria->join = 'LEFT JOIN MenuData ON MenuData.menuID=Menu.id';
            $criteria->order = '`Menu.sort` ASC';
            $criteria->compare("MenuData.locale", $this->lang);
            $results = Menu::model()->findAll($criteria);

同时拥有 Menu 和 Menudata 模型。但出现以下错误:

Relation "MenuData" is not defined in active record class "Menu". 

【问题讨论】:

  • Menudatacase sensetive?
  • MenuData 是我的表名。是的,我认为,我们必须按原样写表名
  • @RohanKumar 查询本身运行良好,但无法在 yii syntax 中实现

标签: php mysql sql yii


【解决方案1】:

$criteria->with == join.

我假设你的模型菜单中有一个关系。

 public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'MenuData' => array(self::HAS_MANY, 'Menudata', 'menuID','joinType' => 'LEFT JOIN'),
    );
}

还有你的标准:

  $criteria = new CDbCriteria();
        $criteria->together = true;
        $criteria->with = array('MenuData');
        $criteria->compare("t.menuType", 1);
        $criteria->compare("t.parent", 0);
       // $criteria->join = 'LEFT JOIN MenuData ON MenuData.menuID=Menu.id';
        $criteria->order = '`t.sort` ASC';
        $criteria->compare("MenuData.locale", $this->lang);
        $results = Menu::model()->findAll($criteria);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多