Cakephp: Отношения к Отношениям - PullRequest
5 голосов
/ 23 декабря 2010

Я хочу смоделировать следующие простые отношения:

Один Пассажир принадлежит Автомобилю; Одна машина имеет много пассажиров.

Таблица пассажиров имеет столбец id и Car_id, таблица Car имеет один столбец id.

Мои модели выглядят так:

<?php
class Passenger extends AppModel {
   var $name = 'Passenger';
   var $belongsTo = 'Car';
} ?>

и

<?php
class Car extends AppModel {
   var $name = 'Car';
   var $hasMany = array (
      'Passenger' => array (
            'className' => 'Passenger',
            'foreignKey' => 'car_id'
         )
   );
}
?>

и мой add Passenger .ctp выглядит так:

<?php
echo $this->Form->create('Passenger');
    echo $this->Form->input('car_id');
    echo $this->Form->end('Save');
?>

Но когда я захожу на страницу, чтобы добавить пассажира, я вижу только пустой выпадающий список. Есть ли дополнительный шаг, который я должен предпринять, чтобы заполнить Dropbox всеми автомобилями?

Ответы [ 3 ]

2 голосов
/ 23 декабря 2010

Пассажир будет знать только об автомобиле, с которым он связан - на данный момент, нет.

В методе add в пассажирском контроллере выполните

$this->Car->find('list');

и передайте результат в ваше представление:

$this->set('cars',$cars);

В представлении укажите переменную $ cars в качестве значения для $ options в объявлении поля:

echo $this->Form->input('car_id', array('options' => $cars));

Кроме того, вы можете сделать что-то вроде:

echo $this->Form->input('Car.id', array('options' => $cars));
2 голосов
/ 23 декабря 2010

Во-первых, вы забыли упомянуть отношение belongsTo в своей модели Пассажира:

<?php
class Passenger extends AppModel {
   var $name = 'Passenger';
   var $belongsTo = array('Car');
}
?>

Далее, в соответствующем действии вашего контроллера вам потребуетсяполучите из базы данных list всех автомобилей и установите для нее переменную модели во множественном числе ($ cars).Это можно сделать следующим образом:

$cars = $this->Passenger->Car->find('list');
$this->set(compact('cars'));

Это преобразует поле ввода car_id в раскрывающийся список с заполненной информацией.

HTH.

0 голосов
/ 05 марта 2015
$this->CompanyCashback->bindModel(array('belongsTo' => array(
        'CompanyBranch' => array('className' => 'CompanyBranch', 'foreignKey' => false, 'conditions' => array('CompanyCashback.publisher_id = CompanyBranch.publisher_id && CompanyBranch.branch_type = "online" ')),
        'PersonalInformation' => array('className' => 'PersonalInformation', 'foreignKey' => false, 'conditions' => array('CompanyCashback.publisher_id = PersonalInformation.user_id')),
        'Country' => array('className' => 'Country', 'foreignKey' => false, 'conditions' => array('PersonalInformation.country_id = Country.id')),
        'User' => array('className' => 'User', 'foreignKey' => false, 'conditions' => array('PersonalInformation.user_id = User.id')))
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...