在模型关系中使用't'可以给出错误
"Column not found: 1054 Unknown column 't.etc' in 'on clause'."
使用't'来引用CActiveRecord模型关系中的当前表。 我经常在使用findAll,CActiveDataProvider等时偶然发现它。
有时它的工作原理有时并不依赖于您执行的模型以及从何处执行。 我尝试使用tableAlias但它不起作用。必须有一个简单的方法。
如何以关系稳定的方式设置我的模型及其关系 总是有效吗?
以下是显示问题的两个类的示例...
class Order extends CActiveRecord
{
/**
* @return array relational rules.
*/
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(
'author'=>array(self::BELONGS_TO, 'User', 'user_id'),
'shopproduct'=>array(self::BELONGS_TO, 'ShopProduct', 'product_id',
'with'=>array(
'tagsrelations',
),
),
);
}
}
class ShopProduct extends CActiveRecord
{
/**
* @return array relational rules.
*/
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(
'author'=>array(self::BELONGS_TO, 'User', 'user_id'),
'tagsrelations'=>array(self::HAS_MANY, 'TagsRelations','',
'on'=>' tagsrelations.tbl_uuid = t.uuid ',
'with'=>'tag',
'order'=>'tag.name ASC',
),
);
}
}
// works
$model=Order::model()->with('shopproduct')->findAll();
// doesn't work
// "Column not found: 1054 Unknown column 't.uuid' in 'on clause'. The SQL statement executed was"
$model=ShopProduct::model()->with('tagsrelations')->findAll();
也许有人可以解释为什么这不能以理解的方式运作。 如何一劳永逸地解决这个问题。 BELONG TO关系通常都有效。 什么是最好的做一个总是有效的HAS MANY关系
答案 0 :(得分:0)
您是否仅为加入或某些特定目的需要t
?因为对于连接,这不是正确的方法。应该这样做:
'tagsrelations'=>array(self::HAS_MANY, 'TagsRelations', array('tbl_uuid'=>'uuid')),
当然,如果您需要,也可以添加with条件。但是加入应该这样做。