Yii:处理多个表 [英] Yii: working with multiple tables
本文介绍了Yii:处理多个表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
尝试执行此查询:
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 模型.但是出现以下错误:
Have both Menu and Menudata models. But getting following error:
Relation "MenuData" is not defined in active record class "Menu".
推荐答案
$criteria->with == join.
$criteria->with == join.
我假设您的模型菜单中有一个关系.
I assume you have a relation in your model menu.
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);
这篇关于Yii:处理多个表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文