0

我有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();

并接收一个数组,其中每个元素就像GoodsCats.id=>GoodsCatsContent.name

CHtml::listData(cats, 'id', 'name')

但是现在我遇到了一个错误GoodsCats.name not defined。当我将GoodsCats关系设置为self::HAS_ONE 时一切正常,但我无法为整个项目更改它。是否有可能以某种方式将model()->with()设置为使用未定义的关系类型,而是使用特定的关系类型?

更新我的模型规则:

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'),
    );
}
4

2 回答 2

0

尝试

$cats = GoodsCats::model()->with(
  array(
    'GoodsCatsContent'=>array(
      'condition'=>'languages_id = 1'
    )
  )
)->findAll();

或者

$cats = GoodsCats::model()->with('GoodsCatsContent')->findAll('languages_id = 1');
于 2012-10-12T13:01:45.643 回答
0

您不能动态更改关系类型。

但是,由于您确定 usinglanguage_id = 1只为您提供一条相关GoodsCatsContent记录,因此您可以这样做而不是 using 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 记录,因此该关系将返回一个arrayalways,即使只有 1 条相关记录,如果没有相关记录,则返回一个空数组。因此,当有 1 条相关记录时,relationName[0]将返回该记录。

于 2012-10-12T14:21:47.190 回答