我在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)如果是的话,我做错了什么