从CakePHP中的一个表中检索所有数据,从另一个表中检索一些数据

时间:2011-06-02 21:21:31

标签: mysql cakephp join

在我的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 个答案:

答案 0 :(得分:1)

如果两者之间没有关系,

加入将无效。 VenueRestaurant。您应该单独调用它们并合并结果

$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);

答案 1 :(得分:1)

我认为你可以按照以下方式做点什么:

<?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 ::将变量设置为视图。

还添加了一些基本排序来向您显示一个选项,即使数组排序与CakePHP没有任何特定关系。

另外修复了一些我最初使用$场地的不良变量名称,以及$ restaurants - 改为始终为$ v和$ r。