添加用户和关联数据CakePhp 3.x并接收关联数据的验证错误

添加用户和关联数据CakePhp 3.x并接收关联数据的验证错误,cakephp,cakephp-3.x,Cakephp,Cakephp 3.x,我在互联网上搜索了一下,并试图通过文档来解决这个问题,但我不明白我做错了什么 我的用户可以拥有会员资格和许多订单。成员资格和订单也与成员资格级别相关联。我不确定这些关联是否正确,但我认为它们是正确的 以下是我的联想: 用户: $this->hasOne('Memberships', [ 'foreignKey' => 'user_id', 'joinType' => 'INNER' ]); $this->hasMan

我在互联网上搜索了一下,并试图通过文档来解决这个问题,但我不明白我做错了什么

我的用户可以拥有会员资格和许多订单。成员资格和订单也与成员资格级别相关联。我不确定这些关联是否正确,但我认为它们是正确的

以下是我的联想:

用户:

    $this->hasOne('Memberships', [
        'foreignKey' => 'user_id',
        'joinType' => 'INNER'
    ]);
    $this->hasMany('MembershipOrders', [
        'foreignKey' => 'user_id',
        'joinType' => 'INNER'
    ]);
订单:

    $this->belongsTo('Users', [
        'foreignKey' => 'user_id',
        'joinType' => 'INNER'
    ]);
    $this->hasOne('MembershipLevels', [
        'foreignKey' => 'membership_level_id',
        'joinType' => 'INNER'
    ]);
成员资格:

    $this->belongsTo('Users', [
        'foreignKey' => 'user_id',
        'joinType' => 'INNER'
    ]);
    $this->hasOne('MembershipLevels', [
        'foreignKey' => 'membership_level_id',
        'joinType' => 'INNER'
    ]);
成员级别:

    $this->belongsToMany('MembershipOrders', [
        'foreignKey' => 'membership_level_id',
        'joinType' => 'INNER'
    ]);

    $this->belongsToMany('Memberships', [
        'foreignKey' => 'membership_level_id',
        'joinType' => 'INNER'
    ]);
在我的用户控制器中,我尝试使用一个函数来添加用户、成员记录和该用户的订单

我试图确保表单中的关联数据显示验证错误(如果有)

在控制器功能中,我有:

public function checkout($id = null)
{
    $user = $this->Users->newEntity($this->request->data(), [
        'associated' => [
            'MembershipOrders' => ['associated' => ['MembershipLevels']]
        ]
    ]);
    $membershipLevel = $this->Users->Memberships->MembershipLevels->get($id);
    if ( $this->request->is('post') ) {
        $user = $this->Users->patchEntity( $user, $this->request->data(), [
            'associated' => [
                'MembershipOrders' => ['associated' => ['MembershipLevels']]
            ]
        ]);
        if ( $this->Users->save($user, ['associated' => ['MembershipOrders' => ['associated' => ['MembershipLevels']]]]) ) {
            $this->Flash->success(__('User has been added.'));
        } else {
            $this->Flash->error(__('User could not be added. Please, try again.'));
        }
    }
    $this->set(compact('user', 'membershipLevel'));
    $this->set('_serialize', ['user', 'membershipLevel']);
}
我的观点的一个简单形式是:

    <?= $this->Form->create($user, ['id' => 'userForm']) ?>
        <fieldset>
            <legend><?= __('Primary Member') ?></legend>
            <?= $this->Form->input('full_name', ['required' => false]) ?>
            <?= $this->Form->input('username', ['required' => false]) ?>
            <?= $this->Form->input('email', ['required' => false]) ?>
            <?= $this->Form->input('password', ['required' => false]) ?>
            <?= $this->Form->input('password_confirmation', ['type' => 'password', 'required' => false]) ?>
            <?= $this->Form->input('specialty', ['required' => false]) ?>
            <?= $this->Form->input('membership_orders.0.billing_name', ['label' => 'Name', 'data-stripe' => 'name', 'required' => false] ) ?>
            <?= $this->Form->input('membership_orders.0.billing_street_1', ['label' => 'Address 1', 'required' => false] ) ?>
            <?= $this->Form->input('membership_orders.0.billing_street_2', ['label' => 'Address 2', 'required' => false] ) ?>
            <?= $this->Form->input('membership_orders.0.billing_city', ['label' => 'City', 'data-stripe' => 'address_city', 'required' => false] ) ?>
        </fieldset>
        <?= $this->Form->button(__('Join'), ['id' => 'submitBtn', 'class' => 'btn']) ?>
    <?= $this->Form->end() ?>

我尝试了MembershipOrders、MembershipOrders、current membership_orders,以及表单中包含和不包含.0的所有订单,但无法获取订单信息的任何验证错误。账单信息将添加到订单表中,准确的表名为“会员\订单”


cake不应该也向我的表单发送相关的验证错误吗?

验证错误包含在$user->errors()中;调试它,调试($user->errors());此外,键是正确的,它们的当前形式是正确的。请注意,
newEntity()。