2

モデルをリンクする (関連付けを作成する) ことに関する Cakephp のドキュメントを実行しました。1 つのモデルで $hasOne メンバーを定義し、もう 1 つのモデルで対応する $belongsTo を定義することで、スキャフォールディングされた追加ビューと編集ビューで単一の選択ドロップダウンを取得できます。今、$hasMany 関係のために、ユーザーが関連付けられた広告を選択できるようにする、スキャフォールディングされた追加ビューと編集ビューで、ある種のフォーム入力 (複数選択ドロップダウン、またはチェックボックス...できればチェックボックス) を取得しようとしています。特定のレンタルに対して。しかし、以下のコードでは、レンタルの追加ビューと編集ビューで広告について言及されていません:'( 何か足りないのですか? これは可能ですか? RoR と Grails でこれが行われているのを見たことがありますが、CakePHP では動作しません。助けてくれてありがとう!

レンタルモデル (app/Model/Rental.php)

<?php
class Rental extends AppModel {
    var $name = 'Rental';             
    var $belongsTo = array(
        'Agent' => array(
            'className'    => 'User',
            'foreignKey'    => 'agent_id'
        ),
        'Bedroom',
        'Landlord' => array(
            'className'    => 'Landlord',
            'foreignKey'    => 'landlord_id'
        )
    );  
    var $hasMany = array(
        'Advertisement' => array(
            'className'     => 'Advertisement',
            'foreignKey'    => 'rental_id',
            //'conditions'    => array('Comment.status' => '1'),
            'order'    => 'Advertisement.created DESC',
            'limit'        => '5',
            'dependent'=> false
        )
    );

    public $validate = array(
        'title' => array(
            'rule' => 'notEmpty'
        ),
        'description' => array(
            'rule' => 'notEmpty'
        )
    );

    public function isOwnedBy($rental, $user) {
        return $this->field('id', array('id' => $rental, 'user_id' => $user)) === $rental;
    }
}

レンタル コントローラー (app/Controller/RentalsController.php)

<?php
class RentalsController extends AppController {
    public $scaffold;
}

広告モデル (app/Model/Advertisement.php)

<?php
class Advertisement extends AppModel {
    var $name = 'Advertisement';                   
    var $belongsTo = array(
        'Rental' => array(
            'className'    => 'Rental',
            'foreignKey'    => 'rental_id'
        ),
        'Author' => array(
            'className'    => 'User',
            'foreignKey'    => 'author_id'
        )
    ); 
}

広告コントローラー (app/Controller/AdvertiesementsController.php)

<?php
class AdvertisementsController extends AppController {
    public $scaffold;
}
4

1 に答える 1

2

Cakeのスキャフォールドビューには、関係のhasMany側からは何も表示されません。彼らはあなたがbelongsToを持っているモデルからそれを選びたいと思っていると仮定します。

率直に言って、複数選択としてそれを行うことは、この関係、私見にとって少し奇妙です。複数選択は通常、hasAndBelongsToMany関係に使用されます。やりたい場合は、Cakeの足場を使わずに、自分で作業を行う必要があります。

于 2012-12-20T04:10:21.343 に答える