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

Mysql 在CakePHP中从一个表检索所有数据,从另一个表检索一些数据,mysql,cakephp,join,Mysql,Cakephp,Join,在我的CakePHP网站中,我想制作一个所有场馆的下拉列表,并且任何拥有的餐厅都是值关系$results=$viouses+$restaurants,而不是array\u merge

在我的CakePHP网站中,我想制作一个所有
场馆
的下拉列表,并且任何拥有
餐厅
都是

我已经在我的事件控制器中尝试过:

        $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);
但它似乎仍然只是得到了场地。我真的不需要两者之间的关联,因为它们的关联都是与某个事件相关的,而不是彼此


我哪里出错了?我是接近了,但只需要调整一下代码,还是我一起做错了?

如果两者之间没有关系,Join将无法工作<代码>地点
和餐厅。您应该分别调用它们并合并结果

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

我认为你可以做一些如下的事情:

<?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没有任何特定关系


还修复了一些我最初使用$VICENTERS和$TRANSORTIONS的错误变量名-更改为一致的$v和$r。

Set::merge(与下面提到的数组\u merge相反)的意义是什么?(另外-我假设你指的是merge($v,$r),对吗?)@Abba-经过一些修改,这基本上是可行的-现在唯一的问题是-所有的餐厅都显示在底部,而不是按字母顺序-有没有想法如何解决这个问题?它是一个数组-尝试使用php内置的一些方便的排序函数。--示例编辑以显示自然的不区分大小写排序,但有大量选项。Set::merge不是array_merge的精确功能副本。我更喜欢在存在cake类的情况下使用cake类,因为我认为它们是用来处理任何cake特定的边缘情况并处理其数据结构的。我尝试了我能想到的几乎所有PHP排序,asort、ksort…等等-它们都使数组p“没什么-不知道为什么。我会试试natcasesort看看效果如何,谢谢!@Ish Kumar做了一些改动,这很有效-现在唯一的问题是-所有的餐厅都显示在底部,而不是按字母顺序排列-有没有想过如何解决这个问题?@Ish-我想这也行,但没有-当我尝试公关时。”int\u r it,它不打印任何内容。:/请确保您不是这样做的
$results=asort($results);
?因为
asort
是通过引用调用并返回布尔值的。不幸的是,array\u merge没有保留键=>值关系
$results=$viouses+$restaurants
,而不是
array\u merge