2011-06-02 22 views
1

在我的CakePHP站点中,我想创建一个包含is_venue=1的所有Venues和任何Restaurants的下拉列表。检索CakePHP中的一个表和另一个表中的所有数据

我已经在我的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); 

但它似乎仍然只是得到场地。我并不是真的需要两者之间的联系,因为他们的联合既是事件,也不是彼此。

我哪里出错了?我关闭了,但只需要调整这些代码,或者我只是一起做错了吗?

回答

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的一个选项。

还修复了一些不好的变量名,我原来用$场馆和$餐馆 - 改为一贯$ V和$ R。

+0

什么是集点::合并(相对于下述array_merge(也? - 我认为你的意思是合并($ v,$ r),是正确的吗?) – Dave 2011-06-02 22:26:25

+0

@Abba - 经过一些改动,这很有效 - 现在唯一的问题是 - 所有餐厅都显示在底部,而不是按字母顺序排列 - 关于如何解决这个问题的任何想法 – Dave 2011-06-03 14:17:27

+0

这是一个数组 - 尝试使用一些内置于PHP中的方便的排序函数http://php.net/manual/en/array.sorting.php - 编辑示例以显示自然不区分大小写的排序,但有很多选项 – 2011-06-03 20:19:27

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); 
+0

@Ish库马尔有了一些改变,这几乎工程 - 现在唯一的问题是 - 所有的餐馆在底部显示的按字母顺序往上冲,而不是 - 关于如何解决这一问题的任何想法? – Dave 2011-06-03 14:17:03

+0

'asort($ results);'应该这样做: – Ish 2011-06-03 16:22:41

+0

@Ish - 我认为它也可以工作,但它不会 - 当我尝试print_r时,它不打印任何东西。 :/ – Dave 2011-06-03 17:06:58

相关问题