2013-09-19 7 views
0

Я хочу получить весь список категорий и подкатегорий которых является enabled=1юй получить данные, используя отношения между моделями

отношения в категориях:

return array(
      'subcategories'=>array(self::HAS_MANY, 'Subcategories', 'id','condition'=>'enabled=1'), 
     ); 

отношения в подкатегории:

return array(
      'categories'=>array(self::BELONGS_TO, 'Categories', 'category_id', 'condition'=>'enabled=1'), 
     ); 

Здесь вы что я хочу делать:

$categories = Categories::model()->with('subcategories')->findAll(); 
    $selectData = array(); 
    foreach ($categories as $category) { 
     $selectData[$category->title] = CHtml::listData($category->subcategories, 'id', 'title'); 
    } 
    echo CHtml::dropDownList('catAndSubcat', null, $selectData); 

Обе таблицы имеют столбец enabled. Каждая категория имеет около 10 подкатегорий. category_id в подкатегории чуждо ключ id в категориях

Но ошибка при получении им:

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'enabled' in where clause is ambiguous. The SQL statement executed was: SELECT `t`.`id` AS `t0_c0`, `t`.`title` AS `t0_c1`, `t`.`page_id` AS `t0_c2`, `t`.`position` AS `t0_c3`, `t`.`enabled` AS `t0_c4`, `subcategories`.`id` AS `t1_c0`, `subcategories`.`category_id` AS `t1_c1`, `subcategories`.`title` AS `t1_c2`, `subcategories`.`page_id` AS `t1_c3`, `subcategories`.`position` AS `t1_c4`, `subcategories`.`enabled` AS `t1_c5` FROM `t_categories` `t` LEFT OUTER JOIN `t_subcategories` `subcategories` ON (`subcategories`.`id`=`t`.`id`) WHERE (enabled=1) 

Помогите!

ответ

0

Вы должны использовать псевдонимы таблиц, как это:

array(
     'subcategories'=>array(self::HAS_MANY, 'Subcategories', 'id','condition'=>'subcategories.enabled=1'), 
    ); 
array(
     'categories'=>array(self::BELONGS_TO, 'Categories', 'category_id', 'condition'=>'categories.enabled=1'), 
    ); 

Update:

$categories = Categories::model()->with('subcategories')->findAll(array('condition' => 't.enabled=1')); 
+0

'' ВЫБРАТЬ t'.'id' AS 't0_c0',' t'.'title' AS '' t0_c1', t'.'page_id' AS 't0_c2',' t'.'position' AS 't0_c3',' t'.'enabled' AS 't0_c4',' подкатегории'''' '' '' t1_c0' '' 'подкатегории''категория_и' AS' t1_c1', 'подкатегории'.' title' AS 't1_c2',' подкатегории'. 'page_id' AS 't1_c3',' подкатегории'''''' '' t1_c4', 'подкатегории'''сказал' AS' t1_c5' FROM 't_categories'' t 'LEFT OUTER JOIN' t_subcategories' 'подкатегории' ON (' subcategories'.'id' = 't'.'id) WHERE (подкатегории.enabled = 1)' – Undrooleek

+0

получает данные из таблиц без принимая во внимание o nly категорий, которые включали – Undrooleek

+0

Теперь вы работаете SQL без erros? Что значит «без учета»? – Olegacy

0

Вы можете попробовать.

return array(
     'subcategories'=>array(self::HAS_MANY, 'Subcategories', 'id','on'=>'subcategories.enabled=1'), 
    ); 

Состояние не работает в отношениях, я думаю.

Редактировать: или вы можете попробовать.

return array(
    'subcategories'=>array(self::HAS_MANY, 'Subcategories','id'), 
); 

В вашем контроллере:

Categories::model()->with('subcategories')->findAllByAttributes(array('subcategories.enabled'=>1)); 
+0

вызывает ошибку ( – Undrooleek

Смежные вопросы