1

解決策は単純で、Containableの動作と関係があるかもしれませんが、機能させることはできません。すべての試みなしで

これが事実です。イベント(会議など)のイベントの詳細を表示したいのですが。各イベントはEventVenueで行われ、各EventVenueは国にあります。

したがって、国モデルには次のものがあります。

public $hasMany = array(
    'EventVenue' => array(
        'className' => 'EventVenue',
        'foreignKey' => 'country_id'
))

EventVenueモデルでは、BelongsToアソシエーションが作成されます

public $belongsTo = array(
    'Country' => array(
        'className' => 'Country',
        'foreignKey' => 'country_id'
))

そして、イベントモデルでは、hasOneアソシエーションが作成されます

 public $hasOne = array(
    'EventVenue' => array(
        'className' => 'EventVenue',
        'foreignKey' => 'event_id',
 ))

私が欲しいのは、EventsControllerでレンダリングされるページに国名を表示することです。すべてのEventおよびEventVenueデータを取得しましたが、会場に関連付けられた国が取得されません。

データは次の方法で取得されます

 $item = $this->Event->findBySlug($slug);

データベースから国名(オランダなど)を取得するにはどうすればよいですか?私はこのようなことを試しましたが、うまくいきませんでした:

 $item = $this->Event->findBySlug($slug,array(
    'contain' => array(
        'Event' => array(
            'EventVenue' => array(
                'Country'
            )
        )
    )
 )
4

3 に答える 3

0

この方法を試してください:

$this->Event->recusive = 2;
$item = $this->Event->findBySlug($slug);
于 2012-07-11T10:01:51.523 に答える
0

これを試して:

$item = $this->Event->findBySlug($slug,array(
    'contain' => array(
        'EventVenue' => array(
            'Country'
        )
    )
);

アップデート

findByはContainableをサポートしていないことが判明しました。これを使用して、目的の結果を得ることができます。

$item = $this->Event->find('first',array(
    'conditions' => array(
        'Event.slug' => $slug
    ),
    'contain' => array(
        'EventVenue' => array(
            'Country'
        )
    )
);

ああ、モデルにこれがあることを確認してください:public $actsAs = array('Containable');

于 2012-07-11T01:36:43.793 に答える
0

検索を行う前に、再帰を2に設定する必要があります。たとえば、次のようになります。

$this->Event->recursive = 2;

これにより、イベント、EventVenue、および国を1つのショットで取得できます

それが役に立てば幸い

于 2012-07-11T23:40:17.610 に答える