Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP 3保存属于多个关联未知类型“&引用;错误_Php_Mysql_Cakephp_Cakephp 3.0 - Fatal编程技术网

CakePHP 3保存属于多个关联未知类型“&引用;错误

CakePHP 3保存属于多个关联未知类型“&引用;错误,php,mysql,cakephp,cakephp-3.0,Php,Mysql,Cakephp,Cakephp 3.0,我一直把头撞在墙上,想弄明白为什么我的电子邮件(belongdomany Guests(belongdomany Emails))无法保存。当我尝试保存带有关联数据(来宾)的电子邮件模型时,它在$this->Emails->save($email)失败,原因是: 未知类型“”错误 无效辩论例外 在这里,我按照CakeBookmarks示例()介绍了关系和编辑表单的tee。甚至构建它并从中提取代码 以下是我的项目中的相关代码,任何帮助或猜测都将不胜感激: 为电子邮件和来宾加入表创建语句: CREA

我一直把头撞在墙上,想弄明白为什么我的电子邮件(belongdomany Guests(belongdomany Emails))无法保存。当我尝试保存带有关联数据(来宾)的电子邮件模型时,它在$this->Emails->save($email)失败,原因是:

未知类型“”错误 无效辩论例外

在这里,我按照CakeBookmarks示例()介绍了关系和编辑表单的tee。甚至构建它并从中提取代码

以下是我的项目中的相关代码,任何帮助或猜测都将不胜感激:

为电子邮件和来宾加入表创建语句:

CREATE TABLE emails_guests (
    email_id INT NOT NULL,
    guest_id INT NOT NULL,
    PRIMARY KEY (email_id, guest_id),
    FOREIGN KEY guest_key(guest_id) REFERENCES guests(id),
    FOREIGN KEY email_key(email_id) REFERENCES emails(id)
);
EmailsTable::初始化

public function initialize(array $config)
{
    // parent::initialize($config);

    $this->table('emails');
    $this->displayField('title');
    $this->primaryKey('id');
    $this->addBehavior('Timestamp');
    $this->belongsToMany('Guests', [
        'foreignKey' => 'email_id',
        'targetForeignKey' => 'guest_id',
        'joinTable' => 'emails_guests'
    ]);
}
GuestsTable::初始化

public function initialize(array $config){
    parent::initialize($config);

    $this->table('guests');
    $this->displayField('name');
    $this->primaryKey('id');
    $this->addBehavior('Timestamp');
    $this->belongsTo('Invitations', [
        'foreignKey' => 'invitation_id'
    ]);
    $this->hasMany('Messages', [
        'foreignKey' => 'guest_id'
    ]);
    $this->belongsTo('SeatingGroups', [
        'foreignKey' => 'seating_group_id'
    ]);
    $this->belongsToMany('Emails', [
        'foreignKey' => 'guest_id',
        'targetForeignKey' => 'email_id',
        'joinTable' => 'emails_guests'
    ]);
}
电子邮件创建/更新视图manage.ctp

            <?= $this->Form->create($email); ?>
                <div class="row">
                    <div class="col-sm-12">
                        <?= $this->Form->input('title', ['id' => false]); ?>
                    </div>
                </div>
                <div class="row">
                    <div class="col-sm-12">
                        <?= $this->Form->input('subject'); ?>
                    </div>
                </div>
                <div class="row">
                    <div class="col-sm-12">
                        <?= $this->Form->input('message', ['class'=>'email-body']); ?>
                    </div>
                </div>
                <div class="row">
                    <div class="col-sm-6">
                        <?= $this->Form->input(
                            'guests._ids',
                            [   
                                // 'type' => 'select',
                                'options' => $guests,
                                // 'multiple' => true,
                                // 'empty' => 'Please select the recipients.',
                                // 'label'=>'Recipients'
                            ]
                        ); ?>
                    </div>
                    <div class="col-sm-6">
                        <div class="row">
                            <div class="col-sm-12">
                                <?= $this->Form->input('send_by', ['id' => 'send-by', 'type' => 'text']); ?>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-6">
                                <?= $this->Form->checkbox('now'); ?>
                                <label for="now">Send Now</label>
                            </div>
                            <div class="col-sm-6">
                                <?= $this->Form->input(
                                    __('Save'),
                                    [
                                        'type' => 'submit',
                                        'class' => 'inline',
                                        'label' => false
                                    ]
                                ) ?>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-sm-12">
                    </div>
                </div>
                <div class="clearfix"></div>
            <?= $this->Form->end() ?>
保存电子邮件并选择一个或多个来宾时的请求数据(这会触发无效类型“”错误):

堆栈跟踪:

⟩ Cake\Database\Type::build
CORE/src/ORM/Table.php, line 1552
⟩ Cake\ORM\Table->_newId
CORE/src/ORM/Table.php, line 1489
⟩ Cake\ORM\Table->_insert
CORE/src/ORM/Table.php, line 1436
⟩ Cake\ORM\Table->_processSave
CORE/src/ORM/Table.php, line 1367
⟩ Cake\ORM\Table->Cake\ORM\{closure}
CORE/src/Database/Connection.php, line 561
⟩ Cake\Database\Connection->transactional
CORE/src/ORM/Table.php, line 1368
⟩ Cake\ORM\Table->save
CORE/src/ORM/Association/BelongsToMany.php, line 557
⟩ Cake\ORM\Association\BelongsToMany->_saveLinks
CORE/src/ORM/Association/BelongsToMany.php, line 506
⟩ Cake\ORM\Association\BelongsToMany->_saveTarget
CORE/src/ORM/Association/BelongsToMany.php, line 750
⟩ Cake\ORM\Association\BelongsToMany->Cake\ORM\Association\{closure}
CORE/src/Database/Connection.php, line 561
⟩ Cake\Database\Connection->transactional
CORE/src/ORM/Association/BelongsToMany.php, line 769
⟩ Cake\ORM\Association\BelongsToMany->replaceLinks
CORE/src/ORM/Association/BelongsToMany.php, line 445
⟩ Cake\ORM\Association\BelongsToMany->saveAssociated
CORE/src/ORM/AssociationCollection.php, line 254
⟩ Cake\ORM\AssociationCollection->_save
CORE/src/ORM/AssociationCollection.php, line 230
⟩ Cake\ORM\AssociationCollection->_saveAssociations
CORE/src/ORM/AssociationCollection.php, line 195
⟩ Cake\ORM\AssociationCollection->saveChildren
CORE/src/ORM/Table.php, line 1447
⟩ Cake\ORM\Table->_processSave
CORE/src/ORM/Table.php, line 1367
⟩ Cake\ORM\Table->Cake\ORM\{closure}
CORE/src/Database/Connection.php, line 561
⟩ Cake\Database\Connection->transactional
CORE/src/ORM/Table.php, line 1368
⟩ Cake\ORM\Table->save
APP/Controller/EmailsController.php, line 61
⟩ App\Controller\EmailsController->manage
[internal function]
⟩ call_user_func_array
CORE/src/Controller/Controller.php, line 411
⟩ Cake\Controller\Controller->invokeAction
CORE/src/Routing/Dispatcher.php, line 114
⟩ Cake\Routing\Dispatcher->_invoke
CORE/src/Routing/Dispatcher.php, line 87
⟩ Cake\Routing\Dispatcher->dispatch
ROOT/webroot/index.php, line 37

根据文档和示例,它应该可以正常工作。提前谢谢

看起来读/缓存模式有问题,或者您为联接表类定义了不正确的主键。对于像您在这里展示的那样的复合主键,它在代码中永远不会到达抛出excation的点

删除
tmp/cache/models/
,如果您有一个
EmailsGuestsTable
类,请通过
Table::primaryKey()
检查它是否以及它设置了什么,如果使用了,应该

['email_id', 'guest_id']

可能您的表最初有一个不同的主键,之后您对它进行了更改,但没有清除缓存和/或更新相应的表类。

错误通常都会附加stacktrace和上下文信息(如果没有,请检查日志),请始终在您的问题中包含这两个信息!知道了。将问题编辑为包含stacktrace。这非常有用。非常感谢。我已经尝试删除缓存,但问题出在我的EmailsGuestsTable中。需要删除这些行并删除缓存://$this->displayField('id');//$此->主密钥('id');刚刚在Cakephp3中发现同样的问题,您的评论救了我,谢谢。
⟩ Cake\Database\Type::build
CORE/src/ORM/Table.php, line 1552
⟩ Cake\ORM\Table->_newId
CORE/src/ORM/Table.php, line 1489
⟩ Cake\ORM\Table->_insert
CORE/src/ORM/Table.php, line 1436
⟩ Cake\ORM\Table->_processSave
CORE/src/ORM/Table.php, line 1367
⟩ Cake\ORM\Table->Cake\ORM\{closure}
CORE/src/Database/Connection.php, line 561
⟩ Cake\Database\Connection->transactional
CORE/src/ORM/Table.php, line 1368
⟩ Cake\ORM\Table->save
CORE/src/ORM/Association/BelongsToMany.php, line 557
⟩ Cake\ORM\Association\BelongsToMany->_saveLinks
CORE/src/ORM/Association/BelongsToMany.php, line 506
⟩ Cake\ORM\Association\BelongsToMany->_saveTarget
CORE/src/ORM/Association/BelongsToMany.php, line 750
⟩ Cake\ORM\Association\BelongsToMany->Cake\ORM\Association\{closure}
CORE/src/Database/Connection.php, line 561
⟩ Cake\Database\Connection->transactional
CORE/src/ORM/Association/BelongsToMany.php, line 769
⟩ Cake\ORM\Association\BelongsToMany->replaceLinks
CORE/src/ORM/Association/BelongsToMany.php, line 445
⟩ Cake\ORM\Association\BelongsToMany->saveAssociated
CORE/src/ORM/AssociationCollection.php, line 254
⟩ Cake\ORM\AssociationCollection->_save
CORE/src/ORM/AssociationCollection.php, line 230
⟩ Cake\ORM\AssociationCollection->_saveAssociations
CORE/src/ORM/AssociationCollection.php, line 195
⟩ Cake\ORM\AssociationCollection->saveChildren
CORE/src/ORM/Table.php, line 1447
⟩ Cake\ORM\Table->_processSave
CORE/src/ORM/Table.php, line 1367
⟩ Cake\ORM\Table->Cake\ORM\{closure}
CORE/src/Database/Connection.php, line 561
⟩ Cake\Database\Connection->transactional
CORE/src/ORM/Table.php, line 1368
⟩ Cake\ORM\Table->save
APP/Controller/EmailsController.php, line 61
⟩ App\Controller\EmailsController->manage
[internal function]
⟩ call_user_func_array
CORE/src/Controller/Controller.php, line 411
⟩ Cake\Controller\Controller->invokeAction
CORE/src/Routing/Dispatcher.php, line 114
⟩ Cake\Routing\Dispatcher->_invoke
CORE/src/Routing/Dispatcher.php, line 87
⟩ Cake\Routing\Dispatcher->dispatch
ROOT/webroot/index.php, line 37
['email_id', 'guest_id']