条件是模型关系

时间:2012-03-08 03:18:05

标签: php yii yii-cactiverecord

我在yii开发会话后遇到了一些麻烦 - 更具体地说,我有一个关于在模型中定义关系的问题。

我想我理解这个理论 - 而且我已经实现了这一壮举。在过去,经过一些麻烦。我一直无处阅读文档,因为我发现这个特殊问题记录不清,因为它很简单

假设一个多语言网站有3个表格,例如。 共享[1] ​​ - [n]的翻译[N] - [1]语言

一个更具体的例子 - 设想一个文章系统。共享包含与语言无关的数据(发布日期/时间,参考图像等) - 翻译(实际文章,单一语言) - 语言(存储对不同语言的引用)

我可以使用$ _GET ['language']从URL获取当前语言状态;

我希望网站忽略除所选当前语言之外的其他语言的所有数据。我特别不想做的是我目前正在使用的方法,即为CDbCriteria添加条件以进行搜索,或者为CActiveDataprovided添加索引。

我想为每个模型指定一次,确定一次,在一个简单的规则中,忽略其他语言中的所有内容。

现在,我已经能够在各个模型的关系函数中指定它。基本上我想要这样的东西工作:

class ArticleData extends CActiveRecord{
...
    public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('title, data', 'required'),
        array('language, source', 'length', 'max'=>10),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
        array('id, title, data, language, source', 'safe', 'on'=>'search'),
    );
}
enter code here
    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(
        'article' => array(self::HAS_ONE, 'Article', 'source'),
        'articlelanguage' => array(self::HAS_ONE, 'Language', 'code','condition' =>  'articlelanguage.code ='. $_GET['language']),
    );
}

class Language extends CActiveRecord{
...
    public function rules()
{
    // NOTE: you should only define rules for those attributes that
    // will receive user inputs.
    return array(
        array('code', 'length', 'max'=>10),
        array('language', 'length', 'max'=>100),
        // The following rule is used by search().
        // Please remove those attributes that should not be searched.
        array('code, language', 'safe', 'on'=>'search'),
    );
}

...
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(
        'articledata' => array(self::HAS_MANY, 'ArticleData', 'language'),

    );
}

所以问题是双重的 - 关于第一个模型关系中的最后一行:

 'articlelanguage' => array(self::HAS_ONE, 'Language', 'code','condition' =>  'articlelanguage.code ='. $_GET['language']),

1)这条线会完成我想要的吗?

2)如果是的话,我做错了什么

0 个答案:

没有答案