将模型链接在一起 hasMany cakephp

Linking Models Together hasMany cakephp

我有两个表:

Group(id/groupname)

People(id/name/groupid)

Group 有很多 People

Group模型中:

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

这样可以吗???

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

谢谢

首先:您需要使用正确的命名约定:

Group(id/name)

Person(id/name/group_id)

如果您在 table 上使用正确的命名约定,则可以使用 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>

你在创建人的时候说你想select一个人的组:

在 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 的魔法应该会自动将您的组填充到 select 框中! 希望对您有所帮助!