将模型链接在一起有很多cakephp

时间:2015-06-10 10:03:49

标签: cakephp

我有两张桌子:

Group(id/groupname)

People(id/name/groupid)

Group有很多People

Group模型中:

var $hasMany = array(
    'People' => array(
        'className' => 'People',
        'foreignKey' => 'groupid'
    )
);

这可以吗???

我还希望我的组index.ctp显示组和属于它的人员。 有人知道怎么做吗?

TKS

1 个答案:

答案 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的魔法会自动填充您的群组的选择框! 希望有所帮助!