我有两张桌子:
Group(id/groupname)
People(id/name/groupid)
Group
有很多People
在Group
模型中:
var $hasMany = array(
'People' => array(
'className' => 'People',
'foreignKey' => 'groupid'
)
);
这可以吗???
我还希望我的组index.ctp显示组和属于它的人员。 有人知道怎么做吗?
TKS
答案 0 :(得分:1)
首先:您需要使用正确的命名约定:
Group(id/name)
Person(id/name/group_id)
如果您在表格上使用正确的命名约定,则可以使用cake bake
自动生成模型,视图和控制器。
如何手动执行此操作:
在您的群组模型中,您需要设置您的关系:
public $hasMany = array(
'Person' => array(
'className' => 'Person',
'foreignKey' => 'group_id'
)
);
我假设您的GroupsController具有正确的index
功能:
public function index() {
$this->set('groups', $this->paginate());
}
接下来,您需要在Groups / index.ctp中显示全部内容。
为此,您遍历所有组,并显示每个组。每个小组都会让所有人都加入其中。如果您不完全确定控制器传递给视图的数据类型,您可以在视图中执行debug($groups)
以查看结构是什么样的。
这是一种非常简单的方法,您可以使用您的群组查看所有用户:
<table>
<tbody>
foreach($groups as $group){
?>
<tr>
<td><?php echo $group['Group']['name']; ?></td>
<td>
<?php foreach($group['Person'] as $person){
echo "<p>" . $person['name'] . "</p>";
} ?>
</td>
</tr>
<?php
}
?>
<tbody>
<table>
您说您想在创建此人时选择一个人的小组:
在PeopleController.php下的,确保你在add()函数中有这个:
// Get a list of all groups
$groups => $this->Person->Group->find('list');
// 'set' the $groups array so it's accessible in your view
$this->set(compact('groups'));
然后,在你的add.ctp视图中:
echo $this->Form->input('group_id', array());
CakePHP的魔法会自动填充您的群组的选择框! 希望有所帮助!