我对控制器和视图有困难。
两个表N - 1关系
产品: ID(PK),名称,价格,尺寸,id_Category
(154,衬衫,20,男,333)
(155,帽子,20,L,325)
类别: ID(PK),名称
(333,new)
(325,折扣)
我对视图的看法:
<?php
foreach($cats as $cat) {
foreach($prods as $prod) {
/* category info */
if ($cat['id'] == $prod['id_Category']) {
/* products info */
}
}
/* a break between categories */
}
?>
我期待看到的内容:
我对控制器没有任何线索,我也不确定该视图。
答案 0 :(得分:1)
Containable是一种允许您将查询结果限制/扩展到您定义的范围的行为。
例如,这将为您提供类别列表:
// Pseudo controller code
$categories = $this->Category->find('all');
array(
array(
'Category' => array(...)
),
array(
'Category' => array(...)
)
)
这将为您提供包含所有产品的类别列表:
// Pseudo controller code
$categories = $this->Category->find('all', array(
'contain' => array('Product')
));
$this->set('categories', $categories); // used in the view
array(
array(
'Category' => array(...),
'Product' => array(
array(...),
)
),
array(
'Category' => array(...)
'Product' => array(
array(...),
)
)
)
通过这种方式,控制器中唯一需要做的就是循环类别,然后循环包含的产品:
// App/View/Categories/index.ctp example
<?php foreach($categories as $row): ?>
In category: <?= $row['Category']['name'] ?> we have:
<?php foreach($row['Product'] as $product): ?>
* <?= $product['name'] ?>
<?php endforeach; ?>
<?php endforeach; ?>
用于定义关系的外键的conventional名称&#34;属于类别&#34;是category_id
如此命名,可以像这样定义产品模型:
<?php
// App/Model/Product.php
class Product extends AppModel {
public $belongsTo = array('Category');
}
如果您不想更改外键 - 这不是问题,您只需告诉CakePHP要查找的字段名:
<?php
// App/Model/Product.php
class Product extends AppModel {
public $belongsTo = array(
'Category' => array(
'foreignKey' => 'id_Category'
)
);
}