У меня есть два lang_menus
menus
и lang_menus
. Моя модель выглядит следующим образом:
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( 'menulanguages'=>array(self::HAS_MANY, 'MenuLangs', 'menuId'), ); } ... public function getMenus(){ $criteria = new CDbCriteria(); $criteria->condition = "t.clientId = ".Yii::app()->user->clientId." AND menulanguages.languageId = ".Yii::app()->user->userlanguage; $count = Menus::model()->with('menulanguages')->count($criteria); $pages=new CPagination($count); //Results per page $pages->pageSize=10; $pages->applyLimit($criteria); $menus = Menus::model()->with('menulanguages')->findAll($criteria); return array('menus' => $menus, 'paging' => $pages); }
Это вызывает ошибку Unknown column 'menulanguages.languageId'
. Ошибка находится в строке $menus = Menus::model()->with('menulanguages')->findAll($criteria);
,
Удивительно, что я правильно вычисляю значение переменной $count
.
При просмотре журнала я вижу, что SQL-запрос, который выполняется для запроса findAll:
SELECT `t`.`id` AS `t0_c0`, `t`.`clientId` AS `t0_c1`, `t`.`restaurantId` AS `t0_c2` FROM `posif_menus` `t` WHERE (t.clientId = 1 AND menulanguages.languageId = 2) LIMIT 10
что означает, что соединение не состоялось. Если для значения счетчика выполняется правильный запрос соединения. Я делаю что-то неправильно ? Пожалуйста помоги.
Просто используйте together()
CActiveRecord или together
свойство CDbCriteria :
$menus = Menus::model()->with('menulanguages')->together()->findAll($criteria);
или:
$criteria = new CDbCriteria(); $criteria->condition = "t.clientId = ".Yii::app()->user->clientId." AND menulanguages.languageId = ".Yii::app()->user->userlanguage; $criteria->together=true;
Попробуйте это .. примените таблицу соединения в cdbcriteria ..
public function getMenus(){ $criteria = new CDbCriteria(); $criteria->condition = "t.clientId = ".Yii::app()->user->clientId." AND menulanguages.languageId = ".Yii::app()->user->userlanguage; $criteria->with = array('menulanguages'); $count = Menus::model()->count($criteria); $pages=new CPagination($count); //Results per page $pages->pageSize=10; $pages->applyLimit($criteria); $menus = Menus::model()->findAll($criteria); return array('menus' => $menus, 'paging' => $pages); }