Столы соединительные CakePHP принадлежит To, hasMany - PullRequest
0 голосов
/ 24 ноября 2010

Tl; Dr: Как создать один массив;из двух таблиц;с hasMany и принадлежит к ассоциациям;прорваться сквозь;с CakePHP;оптимально.

РЕДАКТИРОВАТЬ: С (http://book.cakephp.org/view/872/Joining-tables) Это то, что я пытаюсь научиться делать, хотя он говорит "hasOne", а не hasMany ....

"В CakePHP некоторыеСвязи (ownTo и hasOne) выполняют автоматическое объединение для извлечения данных, поэтому вы можете создавать запросы для извлечения моделей на основе данных в связанном. "

Я пытаюсь выполнить поиск через массив, который в идеале будет содержать данныеиз двух таблиц, которые имеют отношение hasMany и serveTo. Я знаю, что CakePHP имеет встроенную функциональность, чтобы сделать это очень простым, и хотел бы использовать его:принадлежа к поездкам

Итак, я хочу создать массив, содержащий данные из обеих таблиц, чтобы я мог легко отображать данные в представлении. Обратите внимание, что нет ничего о присоединении в массиве, который содержит параметры поиска. IЯ думаю, что CakePHP объединяет таблицы, когда я создаю ассоциации; я просто не знаю, как получить доступ к этим ассоциациям при создании массива.

(я потратилОб этом уже говорилось, и мы не смогли найти пример того, как сделать это в Интернете или в книгах, так что спасибо за вашу помощь).Я мог бы обойти это (создав отдельный массив и получив гораздо более сложный файл представления), но я только начинаю учиться программировать и хотел бы сделать это несколько оптимально и использовать функциональность CakePHP.

Заранее спасибо за помощь!Разве я не прав, что с этими ассоциациями (ownTo и hasMany) мне не нужно явно объявлять объединения в controller / find ()?Я мог бы, на данный момент, попытаться вручную сделать объединения, чтобы увидеть, что происходит.

Существующий код (это прекрасно работает):

trips_controllers:

function view() {
    if(empty($this->data)){
        $this->Session->setFlash('You forgot to put stuff in the form fields!');
        $this->redirect(array('action'=>'index'));
    }
    $price=$this->data['Trip']['price'];
    $origin=$this->data['Trip']['origin_airport'];
    $this->set('trips', $this->Trip->find('all', array('conditions'=>array('Trip.price <='=>$price, 'Trip.origin_airport'=>$origin), 'limit'=>30, 'recursive=>2')));

view:

<th>Trip ID</th>
            <th>Price</th>
            <th>Origin</th  
            </tr>
            <? foreach($trips as $trip):?>
            <tr>
                <td><?=$trip['Trip']['trip_id'];?></td>
                <td><?=$html->link($trip['Trip']['url']);       ?>
                <td><?=$trip['Trip']['origin_airport'];?></td>
                <td><?=$trip['Trip']['price'];?></td>               
                </tr>
                <? endforeach;?>

Еще раз спасибо!

1 Ответ

1 голос
/ 24 ноября 2010

Если у Trip есть Множество ног, вы должны иметь возможность перебирать данные следующим образом:

foreach ($trips as $trip) {
    echo $trip['Trip']['id'];
    …
    foreach ($trip['Leg'] as $leg) {
        echo $leg['id'];
        …
    }
}

debug($trips) твой друг. Макет массива данных Cake по умолчанию очень разумный. Попытайтесь привыкнуть к этому, должно быть очень мало необходимости изменять структуру в 99,99% приложений. Наоборот, есть веские аргументы в пользу того, чтобы поддерживать его повсюду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...