如何正确设置yii模型关系,使用't'来指代默认表是一个好主意

时间:2014-07-04 11:00:40

标签: yii

在模型关系中使用'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关系

1 个答案:

答案 0 :(得分:0)

您是否仅为加入或某些特定目的需要t?因为对于连接,这不是正确的方法。应该这样做:

'tagsrelations'=>array(self::HAS_MANY, 'TagsRelations', array('tbl_uuid'=>'uuid')),

当然,如果您需要,也可以添加with条件。但是加入应该这样做。