0

Yii には、場所に関連付けられたメディアがあります。私はそのように設定された関係を持っています:

パブリック関数関係() {

    return array(
        'users' => array(self::HAS_ONE, 'Users', array('id' => 'user_id')), 
        'locations' => array(self::HAS_ONE, 'Locations', array('id' => 'object_id'), 'together' => true, 'select' => '*')
    );
}

クエリを実行するときは、'with' ステートメントを使用してテーブルを結合します。

$models = Media::model()->with('lodcation') -> findAll($criteria);

そして、データを json オブジェクトに入れて、CJSON 応答として返します。

echo CJSON::encode($models);

問題は、返されるフィールドがメディアである親モデルのみからのものであり、結合されたモデルである場所からのものではないことです。私の質問は、親モデルと結合されたモデルの両方の結果を Yii で表示するにはどうすればよいですか?

4

2 に答える 2

2

あなたの関係

'locations' => array(self::HAS_ONE, 'Locations', array('id' => 'object_id'), 'together' => true, 'select' => '*')

名前'locations'は ですが、クエリで使用しようとすると が参照されます。->with('lodcation')これにより、findAll メソッドが存在しないリレーションから積極的にデータをロードしようとします。呼び出しを に変更すると、$models = Media::model()->with('locations') -> findAll($criteria); この問題が修正されます。

おそらく、使用している関係名がここでノイズを発生させて'locations'いる可能性があります。複数形が場所の配列を参照しているように見えるためです。この名前を単一のままにしておく'location'と、関係の意味がself::HAS_ONEより明確になります。

于 2013-03-21T18:43:00.127 に答える
1

CJSON::encode()親モデルからの直接の属性のみを常に使用します。代わりに、次の拡張機能のいずれかを試すことができます。

于 2013-03-21T18:09:41.217 に答える