0

Visits というテーブルからデータを取得しており、部屋の情報も取得したいと考えています。セル Visits.room_id は Rooms.id を参照しますが、CakePHP は代わりに Visits.id を使用していますが、これは主キーであるためだと思います。

ここにテーブルがあります

Visits - id is primary key. I even tried setting room_id as a foreign key when creating the table
id    |   guest_id    |    room_id   |   arrival_date   |    departure_date

Rooms - id is prmary key. 
id  |   description   |   max_occupancy

したがって、基本的には、クエリで次のことを行っています

where Visits.id = Rooms.id

それ以外の

where Visits.room_id = Rooms.id

私の訪問モデルには次のものがあります

public $hasOne = array(
    'room' => array(
        'className' => 'room',
        'foreignKey' => 'id'
    )
);

VisitsController からのクエリの例を次に示します。

$visits = $this->paginate('Visit', array(
            'arrival_date >=' => $date
            )
        );                  
        $this->set(compact('visits'));

Visit.id の代わりに Visit.room_id を使用するように CakePHP に指示する方法はありますか?

4

2 に答える 2

1

Visitモデルでこれを試してください

public $belongsTo = array('Room');

の代わりにhasOne

多分これはあなたが望むものですか?

于 2013-08-13T18:56:03.937 に答える
0

これ

public $hasOne = array(
    'room' => array(
        'className' => 'room',
        'foreignKey' => 'id'
    )
);

正しく設定されていません。私はあなたが慣例に固執しているように見えるので、関係は次のようなワンライナーで要約できます

public $hasOne = array('Room');

これは実際には規則の利点であり、機能するために多くの設定を行う必要はありません。

(そしてルームモデルでは、public $belongsTo = array('Visit');必要に応じて逆にする必要があります)

さて、それを片付けて、あなたの関係を再考してください。ドキュメントを確認してください。Visit hasOne Room の場合、テーブルは次のようになります。

Visit                    Room
-----                    ----
id | etc                 id | visit_id

hasOne

hasOne: もう一方のモデルには外部キーが含まれています。

したがって、現在のようにテーブルを維持するには、リレーションを and にする必要がVisit belongsTo Roomあり ますRoom hasOne Visit(または、多くの場合がありますが、あなた次第です)。

(PD。ケーキv2.xを想定しています)

于 2013-08-13T18:50:03.573 に答える