2013-12-10 3 views
0
структуры

База данныхопределения отношения не для первичных столбцов индекса

Yii::app()->db->createCommand()->createTable('ar_table_column', array(
    'col_int1' => 'integer NULL', 
    'col_int2' => 'integer NULL', 
    'col_int3' => 'integer NULL', 
    'col_id' => 'pk', 
)); 
Yii::app()->db->createCommand()->createTable('ar_table', array(
    'table_int1' => 'integer NULL', 
    'table_int2' => 'integer NULL', 
    'table_int3' => 'integer NULL', 
    'table_id' => 'pk', 
)); 
Yii::app()->db->createCommand()->createIndex('ar_table_idx', 'ar_table', 
    'table_int1', true); 

Мне нужна такая связь - таблица может иметь много столбцов, связанных с ar_table_column.col_int2 = ar_table.table_int1 (не первичным ключом, но обратите внимание, что table_int1 является уникальным). Мне нужно это отношение с точки зрения столбца, то есть мне нужно иметь доступ к таблице из каждого столбца.

Первое испытание:

'table' => array(self::BELONGS_TO, 'ArTable', '', 
    'on' => 't.col_int2=table.table_int1',), 

И это половинной хорошее решение. Есть 2 случая. Во-первых:

$columnInRelation = ArColumn::model()->with('table')->find(); 
$tableInRelation = $columnInRelation->table; 
var_export($tableInRelation->attributes); 

и он хорошо работает - я получаю правильный набор атрибутов.

Второй случай:

$columnInRelation = ArColumn::model()->find(); 
$tableInRelation = $columnInRelation->table; 
var_export($tableInRelation->attributes); 

и там я получаю ошибку SQL из запроса:

ВЫБРАТЬ table.table_int1 AS t1_c0, table.table_int2 А.С. t1_c1, table.table_int3 А.С. t1_c2, table.table_id AS t1_c3 FROM ar_table table WHERE (t.col_int2 = table.table_int1)

Ошибка очевидна.

Как определить отношение, чтобы оно имелось в обоих случаях - с использованием with() и не использовать?

ответ

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