CakePHP将关联表的主键保存为另一个表的外键

CakePHP将关联表的主键保存为另一个表的外键,php,mysql,cakephp,Php,Mysql,Cakephp,因此,我目前正在研究如何添加用户。添加电子邮件记录,然后使用自动递增的电子邮件id分配给用户表中的电子邮件_id,该id为从属id <?php echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']); echo $this->Form->control('Users.password', ['requ

因此,我目前正在研究如何添加用户。添加电子邮件记录,然后使用自动递增的电子邮件id分配给用户表中的电子邮件_id,该id为从属id

    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`

    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`
我都是从用户控制器上完成的

public function add()
{
    if ($this->request->is('post')) {//specify we are getting PostData
        $data = [
        //'id' => '111',
        'address' => $this->request->data['Emails']['address'],
        'created' => Time::now(),
        'last_modified' => Time::now(),
        'last_contacted' => Time::now() ];  

        $emails = TableRegistry::get('Emails');

        $email = $emails->newEntity($data, [ 'associated' => ['Users']]);   
        $save = $emails->save($email, ['associated' => 'Users']);
        $email_id = $save->id;


        $users = TableRegistry::get('Users');
        $user = $users->newEntity($this->request->getData(), ['associated' => ['Emails.id']]);
        $user->dob = date('Y-m-d', strtotime($user->dob));
        $user->email['id'] = $email_id;
        $user->is_admin = 'n';
        $user->last_login = Time::now();
        $user->created = Time::now();
        $user->last_modified = Time::now();


        if ($emails->save($email, ['associated' => 'Users'])) {

            if($users->save($user, ['associated' => 'Emails'])) {
                $this->Flash->success(__('The user has been saved.'));
                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error(__('User could not be saved. Please, try again.'));
            }
        }else {             
            $this->Flash->error(__('Email save failure, please try again.'));   
        }

    }
    $emails = $this->Users->Emails->find('list', ['limit' => 200]);
    $this->set(compact('user', 'emails'));
    $this->set('_serialize', ['user']);

}
    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`
它从以下表单中获取数据:

    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`
`表单->创建()?>

    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`
我似乎无法接受用户的输入并将其添加到表中。错误包括:

    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`
无法封送“电子邮件”关联的数据。它与“Users”无关,当我只将hasone放在UsersTable中时,就会出现这种情况。如果我只在EmailsTable里有它也一样

    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`

错误1452:无法添加或更新子行:外键约束失败,当两者都有一行且我先发送电子邮件时会发生此情况。它仍然说没有fk关系

您使用的是哪个CakePHP版本?CakePHP版本3.4现在没有时间回答。。。我建议你先读一读储蓄/编组协会是如何运作的,你在那里做的事情是没有必要的,而且里面充满了陷阱:|。谢谢。是的,读了很久了。它只是不想保存。
    <?php
        echo $this->Form->control('Emails.address', ['required' => true, 'label' => 'Email']);
        echo $this->Form->control('Users.password', ['required' => true, 'label' => 'Password']);
        echo $this->Form->label('Gender');
        echo $this->Form->radio('Users.gender',['m'=>'Male', 'f' => 'Female'] , [ 'required' => true]);
        echo $this->Form->control('Users.family_name', [ 'required' => true, 'label' => 'Given Name']);
        echo $this->Form->control('Users.given_name', [ 'required' => true,  'label' => 'Family Name']);
        echo $this->Form->control('Users.dob', [ //birth date between 1900 and current year
          'data-format'=>'d m Y',
          'class' => 'dateinput',
          'required' => true,
          'data-default-date'=> '03-30-1993',
          'maxYear' => date('Y') - 17, 

          ]);
        echo $this->Form->control('Users.phone', [ 'required' => true]);

    ?>

</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=>'text-right']) ?>
<?= $this->Form->end() ?>`