Получить все данные из одной таблицы, а некоторые из другой в CakePHP - PullRequest
1 голос
/ 03 июня 2011

На моем сайте CakePHP я хочу сделать выпадающий список всех Venues и любых Restaurants, имеющих is_venue=1.

Я пробовал это в моем events_controller:

        $venueOptions = array(
        'fields' => array('id', 'name_address'),
        'order' => array('name'),
        'join' => array(
            array(
                'table' => 'restaurants',
                'alias' => 'Restaurants',
                'type' => 'inner',
                                    'fields' => array('id', 'name'),
                'foreignKey' => false,
                'conditions' => array('restaurants.is_venue = 1')
            )
        ),
    );
    $venues = $this->Event->Venue->find('list', $venueOptions);

Но, похоже, все еще только посещение мест.Мне действительно не нужна связь между ними, так как они будут связаны с событием, а не друг с другом.

Где я ошибся?Я близко, но мне просто нужно настроить этот код, или я просто все делаю неправильно?

Ответы [ 2 ]

1 голос
/ 03 июня 2011

Я думаю, вы могли бы сделать что-то вроде:

<?php
    ....
    $v = $this->Venue->find( 'list' );
    $r = $this->Restaurant->find( 'list' );
    $venues = Set::merge( $v, $r );
    natcasesort( $venues );
    // print_r( $venues );

    $this->set( 'venues', $venues );
    ...
?>

Что очень похоже на приведенный выше код - я просто использую класс Set и проверяю Controller :: set для переменной для представления.

Также добавлена ​​некоторая базовая сортировка, чтобы показать вам один вариант, хотя сортировка массива не имеет ничего общего с CakePHP.

Также исправлены некоторые недопустимые имена переменных, в которых я изначально использовал $ venues, и $ restaurant - изменились на постоянные $ v и $ r.

1 голос
/ 03 июня 2011

Регистрация не будет работать, если между ними нет никакой связи. Venue и Restaurant. Вы должны назвать их отдельно и объединить результаты

$venues = $this->Event->Venue->find('list', $venueOptions);
$restaurants = $this->Event->Restaurant->find('list', array('conditions' => array('is_venue' => '1')));
$results = array_merge($venues, $restaurants);

// sort results
asort($results);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...