Cakephp 4将2个现有实体与elementstomany关联起来

问题描述

首先,感谢您的耐心配合。很长一段时间后,我开始着手处理PHP编码。我已经完成了著名的Cake教程,现在继续了解我的知识并创建新的解决方案。 我正在创建一个投票系统。当前用户对建议(与文章相同)进行投票时,需要在建议和用户间的相关交叉表中保存新条目。我认为公共函数link()是执行此操作的最佳方法。请参见下面的ArticlesController中的函数。但是,我收到一条错误消息“调用未定义的方法Authentication \ Identity :: isNew()”。这表明我没有在此呼叫周围进行任何授权。谁能告诉我我错过了什么?还是有更好的方法来做到这一点? 注意;我确实知道,当我已经有了一个建议时,我正在处理建议表,但这看起来很奇怪,但是我找不到一个实体直接将其链接到关联实体的方法(即,我没有找到实体的链接功能) 。希望能以更精简的方式完成此操作。

public function upVote($id = null)
{
    $suggestion = $this->Suggestions->get($id);
    $this->Authorization->skipAuthorization();
    $user = $this->request->getAttribute('identity');
    
    //Create link between current suggestions and current user in the suggestions_users table
    $suggestionsTable = $this->getTableLocator()->get('Suggestions');
    $suggestionsTable->Users->link($suggestion,[$user]);
    
    if ($VoteTable->save($Vote)) {
        // The foreign key value was set automatically.
        $this->Flash->success(__('Your Vote has been cast.'));
        }
    else {
        $this->Flash->error(__('The Vote Could not be cast. Apologies for the technical issue.'));
    }
    
}

堆栈跟踪;

2020-11-12 13:46:52 Error: [Error] Call to undefined method Authentication\Identity::isNew() in C:\wamp64\www\cake\vendor\cakePHP\authorization\src\IdentityDecorator.PHP on line 125
Stack Trace:
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\ORM\Association\BelongsToMany.PHP:1323
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\ORM\Association\BelongsToMany.PHP:864
- C:\wamp64\www\cake\src\Controller\SuggestionsController.PHP:143
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Controller\Controller.PHP:529
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Controller\ControllerFactory.PHP:79
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\BaseApplication.PHP:251
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:77
- C:\wamp64\www\cake\vendor\cakePHP\authorization\src\Middleware\AuthorizationMiddleware.PHP:129
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\authentication\src\Middleware\AuthenticationMiddleware.PHP:122
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Routing\Middleware\RoutingMiddleware.PHP:166
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Middleware\CsrfProtectionMiddleware.PHP:156
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Middleware\BodyParserMiddleware.PHP:159
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Routing\Middleware\RoutingMiddleware.PHP:166
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Routing\Middleware\AssetMiddleware.PHP:68
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Error\Middleware\ErrorHandlerMiddleware.PHP:121
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\debug_kit\src\Middleware\DebugKitMiddleware.PHP:60
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:73
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Runner.PHP:58
- C:\wamp64\www\cake\vendor\cakePHP\cakePHP\src\Http\Server.PHP:90
- C:\wamp64\www\cake\webroot\index.PHP:40

Request URL: /suggestions/upVote/1
Referer URL: http://localhost:8000/cake/suggestions

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)