0

私はインターネットを精査し、ドキュメントでこれを理解しようとしましたが、何が間違っているのかわかりません。

メンバーシップと多くの注文を持つことができるユーザーがいます。メンバーシップと注文は、メンバーシップ レベルにも関連付けられています。これらの関連付けが正しいかどうかはわかりませんが、正しいと思います。

ここに私の協会があります:

ユーザー:

    $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、現在のmembership_orders、およびフォーム内の .0 の有無にかかわらずすべてを試しましたが、注文情報の検証エラーを取得できません。請求情報は注文テーブルに追加され、正確なテーブル名は「membership_orders」です。

Cake は、関連する検証エラーをフォームにも送信するべきではありませんか?

4

0 に答える 0