我的CakePHP应用程序有两个问题(它是我在CakePHP中的第一个问题)。我正在尝试将旧的php网站转换为蛋糕。
1.Issue
我的控制器接受参数$ id,但数据是从连接表中传来的,所以在cookbook中它有这样的东西
我的控制员 dish_categories_controller.php
class DishCategoriesController extends AppController {
var $uses = array("DishCategory");
var $hasOne ='';
function get_categories($id)
{
$this->set('dishes',$this->DishCategory->find());
$this->layout = 'master_layout';
}
}
模型
dish_category.php
class DishCategory extends AppModel{
var $name = 'DishCategory';
var $hasOne = array(
'Dish' => array(
'className' => 'Dish',
'conditions' => array('Dish.id' => '1'),
'dependent' => true
)
);
}
正如您所见,Dish.id => '1'是硬编码的,如何让它在那里动态,以便我传递一个值,使它像Dish.if => $ id?。
这是我的第一个问题。
第二个问题与视图
有关该模型只返回一条记录,如何才能返回所有记录,以及如何在当前视图和数组格式的代码下面循环显示该记录。
这是我认为的
<?php
echo $dishes['DishCategory']['category_info'];
echo $dishes['DishCategory']['category_title'];
echo $dishes['Dish']['dish_name'];
echo $dishes['Dish']['dish_image'];
echo $this->Html->image($dishes['Dish']['dish_image'], array('alt' => 'CakePHP'))
?>
数组格式
Array ( [DishCategory] => Array
( [id] => 1 [category_name] => Appetizers
[category_keywords] => appetizer, appetizers
[category_title] => Our Side Dishes
[category_info] => Test Test
[dish_id] => 1 )
[Dish] => Array ( [id] => 1
[dish_name] => Rice
[dish_disc] => The Best flavor ever
[dish_price] => 2.90 [dish_image] => /img/rice_chicken.jpeg [dish_category_id] => 1
[dish_price_label] => Delicious Arepa ) )
感谢您的帮助,帮助我了解如何更好地完成此操作。谢谢。
答案 0 :(得分:3)
首先,您 DishCategoriesController 具有模型属性,您可以删除它们。在您的控制器中,您将为查找设置条件,如下所示:
class DishCategoriesController extends AppController {
function get_categories($id)
{
// find category with a dish of $id
$this->set('dishes', $this->DishCategory->find('all', array(
'conditions' => array(
'Dish.id' => $id
)
)));
// set master layout
$this->layout = 'master_layout';
}
}
您的 DishCategory 模型看起来非常基本,您不需要对关系条件进行硬编码:
class DishCategory extends AppModel {
/**
* hasOne associations
*
* @var array
*/
public $hasOne = array(
'Dish' => array(
'className' => 'Dish',
'foreignKey' => 'dish_category_id'
)
)
}
此时值得注意的是,由于 DishCategory hasOne Dish ,使用上面的查询查询,它只会返回一个单一结果。但是,你返回了多个结果,你可以在你的视图中循环遍历它们:
<?php foreach ($dishes as $key => $dish): ?>
<?php var_dump($dish) ?>
<?php endforeach ?>