2013-12-10 51 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',), 

這是一個半很好的解決方案。有兩種情況。第一個:

$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 AS t1_c1,table.table_int3 AS t1_c2,table.table_id AS t1_c3 FROM ar_table表WHERE(t.col_int2 = table.table_int1)

錯誤很明顯。

我應該如何定義關係,使它在兩種情況下都可用 - 使用with()而不是使用?

回答