关系定义不适用于主索引列

时间:2013-12-10 11:12:19

标签: yii relationship

数据库结构

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错误:

SELECT 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 table WHERE(t.col_int2 = table.table_int1)

错误很明显。

如何定义关系以使其在两种情况下都可用 - 使用with()而不使用?

1 个答案:

答案 0 :(得分:0)

关系应该根据http://www.yiiframework.com/doc/guide/1.1/en/database.arr

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