0

私はGoodsCats次の関係を持つモデルを持っています:

public function relations(){
  return array(
    'GoodsCatsContent' => array(self::HAS_MANY, 'GoodsCatsContent', 'parent_id'),
  );
}

そして今、私はすべての要素を見つけたいと思っていますGoodsCatsが、1つの子要素(特定の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 definedGoodsCatsリレーションを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'),
    );
}
4

2 に答える 2

0

リレーションタイプを動的に変更することはできません。

language_id = 1ただし、を使用すると関連するレコードが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に関連するGoodsCatsContentレコードがx個あります。したがって、array関連レコードが1つしかない場合でも、リレーションは常に戻り、関連レコードがない場合は空の配列を返します。したがって、関連するレコードが1つある場合、はrelationName[0]そのレコードを返します。

于 2012-10-12T14:21:47.190 に答える
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 に答える