在我的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);
但它似乎仍然只是得到了场地。我真的不需要两者之间的关联,因为他们的关联都将与事件相关,而不是彼此。
我哪里出错了?我是关闭的,但只需要调整这段代码,或者我只是一起做错了吗?
答案 0 :(得分:1)
加入将无效。 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);
答案 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。