添加用户和关联数据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()。