Есть пара вещей, которые я не понимаю о том, что я здесь делаю. Во-первых, я не уверен, как, черт возьми, мне следует строить логику контроллера. Вот первая часть:
public function restaurants($restaurantType) {
$this->set('title', $this->params['id'].' restaurants in and near Gulf Shores, AL');
$f=$this->Restaurant->Cuisine->find('all', array(
'conditions'=>array(
'Cuisine.cuisine_type'=>$restaurantType
)
)
);
$this->set('restaurantType', $f);
}
Это, очевидно, не работает. Я не знаю, как назвать мою переменную, а торт постоянно говорит мне, что аргумент для restaurant () отсутствует. Все, что мне нужно, это чтобы URL http://www.somesite.com/restaurants/seafood показывал мне все рестораны с морепродуктами kitchen_type. Вместо этого он ничего не возвращает. У меня была эта логика контроллера раньше:
$this->paginate['Restaurant']['Cuisine']=array(
'limit'=>9,
'order' => 'RAND()',
'contain'=>array(
'User'=>array('id'),
'Cuisine',
'Location',
'Image',
'Coupon'=>array('promo_code', 'description')
),
'conditions'=>array(
'Cuisine.cuisine_type'=>$this->params['id']
'Restaurant.active'=>1
)
);
$data = $this->paginate('Restaurant');
$this->set('restaurantType', $data);
и это дало мне ВСЕ в моей базе данных. и все равно выдает аргумент пропущенной ошибки.
Во-вторых, это отношения HABTM. Я прочитал в этой теме переполнения стека , что мне нужно было делать вручную. Итак, вот оно:
public $paginate=array(
'joins' => array(
array(
'table' => 'restaurants_cuisines',
'alias' => 'RestaurantsCuisine',
'type' => 'inner',
'conditions'=> array('RestaurantsCuisine.restaurant_id = Restaurant.id')
),
array(
'table' => 'cuisines',
'alias' => 'Cuisine',
'type' => 'inner',
'conditions'=> array(
'Cuisine.id = RestaurantsCuisine.cuisine_id'
)
)
)
);
Я думаю, что эта часть права, потому что я не получаю ничего странного от этого. Я думаю, что просто не знаю, как правильно передать параметр. Любая помощь будет очень ценится!
ОБНОВЛЕНИЕ Вот моя новая, улучшенная индексная функция:
public function index($restaurantType) {
$this->paginate['Restaurant']['Cuisine']=array(
'limit'=>9,
'order' => 'RAND()',
'contain'=>array(
'User'=>array('id'),
'Cuisine',
'Location',
'Image',
'Coupon'=>array('promo_code', 'description')
),
'conditions'=>array(
'Cuisine.cuisine_type'=>$this->params['id'],
'Restaurant.active'=>1
)
);
$data = $this->paginate('Restaurant');
$this->set('restaurantType', $data);
}