我有GoodsCats
模型与下一个关系:
public function relations(){
return array(
'GoodsCatsContent' => array(self::HAS_MANY, 'GoodsCatsContent', 'parent_id'),
);
}
现在我想查找所有GoodsCats
个元素但有一个子元素(具有特定language_id
):
$cats = GoodsCats::model()->with(
array(
'GoodsCatsContent'=>array(
'on'=>'languages_id = 1'
)
)
)->findAll();
并记下一个数组,其中每个elemt都像GoodsCats.id=>GoodsCatsContent.name
:
CHtml::listData(cats, 'id', 'name')
但是现在我收到错误GoodsCats.name not defined
。
当我将GoodsCats
关系设置为self::HAS_ONE时,一切正常,但我无法为整个项目更改它。
它是否可以设置model()->with()使用未定义的关系类型而不是特定的关系类型?
UPD 我的模特规则:
GoodsCatsContent
:
public function rules()
{
return array(
array('parent_id', 'required'),
array('active', 'numerical', 'integerOnly'=>true),
array('parent_id', 'length', 'max'=>10),
array('name, seo_title, seo_keywords, seo_description', 'length', 'max'=>255),
array('short_content, content', 'safe'),
array('id, parent_id, active, name, short_content, content, seo_title, seo_keywords, seo_description', 'safe', 'on'=>'search'),
);
}
GoodsCats
:
public function rules()
{
return array(
array('active, prior', 'numerical', 'integerOnly'=>true),
array('photo', 'length', 'max'=>255),
array('id, photo, active, prior', 'safe', 'on'=>'search'),
);
}
答案 0 :(得分:0)
尝试
$cats = GoodsCats::model()->with(
array(
'GoodsCatsContent'=>array(
'condition'=>'languages_id = 1'
)
)
)->findAll();
或
$cats = GoodsCats::model()->with('GoodsCatsContent')->findAll('languages_id = 1');
答案 1 :(得分:0)
您无法动态更改关系类型。
但是,由于您确定使用language_id = 1
仅为您提供了一条相关的GoodsCatsContent
记录,因此您可以执行此操作,而不是使用listData()
:
$myList=array();
foreach ($cats as $acat){
$myList[$acat->id]=isset($acat->GoodsCatsContent[0]->name)? $acat->GoodsCatsContent[0]->name :'';
// you need isset incase some of the GoodsCats don't have a related GoodsCatsContent
}
// you can now use $myList as you would have used the array returned by listData()
因为这是一个HAS_MANY关系,每个GoodsCats
将有x个相关的GoodsCatsContent记录,因此即使只有1个相关记录,该关系也将始终返回array
,并且如果没有相关记录,则为空数组。因此,当有1条相关记录时,relationName[0]
将返回该记录。