为什么我的属于许多协会在 CakePHP 中不起作用


Why is are my BelongsToMany associations not working in CakePHP?

我的数据库中有用户、团队和teams_users表。创建新团队时,我希望将团队和用户以及一些附加信息保存到联接表中。然而,CakePHP 3似乎并没有认识到用户和团队之间的关系。

''模型''表

''用户表.php

$this->belongsToMany('Teams', [
    'joinTable' => 'teams_users',
]);
''模型''表

''团队表.php

$this->belongsToMany('Users', [
    'joinTable' => 'teams_users',
]);
''

Model''Table''TeamsUsersTable.php

$this->belongsTo('Teams');
$this->belongsTo('Users');
''控制器

''团队控制器.php

function Create() {
...
    $user = $teamsTable->Users->get($this->Auth->user('id'));
    $user->_joinData = $teamsTable->TeamsUsers->newEntity();
Error: Table "App'Model'Table'TeamsTable" is not associated with "TeamsUsers"

首先,您应该使用 through 选项

然后你可以做很多想法:

那么_joinData不需要TeamsTables对象,可以是一个简单的实体(见手册):

$user->_joinData = new Entity();

或者您可以加载模型

$this->loadModel('TeamsUsers')
$user->_joinData = $this->TeamsUsers->newEntity()

最后是这样的:

谢谢所有的好建议。最后是这样的:

if ($this-request->is('post')) {
            $team = $this->Teams->patchEntity($team, $this->request->data);
            $user = $this->Teams->Users->get($this->Auth->user('id'));
            $teams->save($team);
            $user->_joinData = new Entity();
            $user->_joinData->nickname = $nickname;
            $this->Teams->Users->link($team, [$user]);
            $teams->save($team);
        }