当前位置: 首页 > 知识库问答 >
问题:

Laravel-将persons表中主键的值存储在users表的外键中

龚招
2023-03-14

我使用的框架Laravel。

我有两个表(用户和人员)。我想将persons表的主键person\u id存储在users表的外键person\u id中。目前我使用这个$user-

表用户

CREATE TABLE IF NOT EXISTS `festival_aid`.`users` (
  `user_id` BIGINT NOT NULL AUTO_INCREMENT,
  `user_username` VARCHAR(45) NOT NULL,
  `user_email` VARCHAR(45) NOT NULL,
  `user_password` CHAR(32) NOT NULL,
  `user_salt` CHAR(32) NOT NULL,
  `user_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `user_modified` TIMESTAMP NULL,
  `user_deleted` TIMESTAMP NULL,
  `user_lastlogin` TIMESTAMP NULL,
  `user_locked` TIMESTAMP NULL,
  `user_token` VARCHAR(128) NULL,
  `user_confirmed` TIMESTAMP NULL,
  PRIMARY KEY (`user_id`, `person_id`),
  UNIQUE INDEX `user_email_UNIQUE` (`user_email` ASC),
  INDEX `fk_users_persons1_idx` (`person_id` ASC),
  CONSTRAINT `fk_users_persons1`
    FOREIGN KEY (`person_id`)
    REFERENCES `festival_aid`.`persons` (`person_id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

餐桌上的人

CREATE TABLE IF NOT EXISTS `festival_aid`.`persons` (
  `person_id` BIGINT NOT NULL AUTO_INCREMENT,
  `person_firstname` VARCHAR(45) NULL,
  `person_surname` VARCHAR(45) NULL,
  `person_created` TIMESTAMP NOT NULL,
  `person_modified` TIMESTAMP NULL,
  `person_deleted` TIMESTAMP NULL,
  PRIMARY KEY (`person_id`))
ENGINE = InnoDB;

索引操作

public function index()
    {
       $person = Person::with('user')->orderBy('person_id')->paginate(10);

       return View::make('persons.index')
           ->with('person', $person);
    }

商店行动

public function store()
{
    $input = Input::all();


    $rules = array();
    $validator = Validator::make($input, $rules);

    if($validator->passes())
    {

        $password = $input['user_password'];
        $password = Hash::make($password);

        $person = new Person();

        $user = new User();

        $person->person_firstname = $input['person_firstname'];
        $person->person_surname = $input['person_surname'];

        $user->user_username = $input['user_username'];
        $user->user_email = $input['user_email'];
        $user->user_password = $password;

        $person->save();

        $user->person()->associate($person, 'person_id', 'user_id');

        $user->save();

        Session::flash('message', 'Successfully created user!');
        return Redirect::to('persons/index');
    }
    else {
        return Redirect::to('persons/create')->withInput()->withErrors($validator);
    }
}

用户迁移

Schema::table('users', function(Blueprint $table)
        {
        $table->increments('user_id');
            $table->string('user_email');
            $table->timestamp('user_created');
            $table->timestamp('user_modified');
            $table->timestamp('user_deleted');
            $table->timestamp('user_lastlogin');
            $table->timestamp('user_locked');

            $table->foreign('person_id')
                ->references('id')->on('persons')
                ->onDelete('cascade');
        });

人员迁移

public function up()
    {
        Schema::table('persons', function(Blueprint $table)
        {
            $table->increments('person_id');

            $table->string('person_firstname');
            $table->string('person_surname');
        });
    }

模型用户

class User extends Eloquent  {

    protected $primaryKey = 'user_id';

    public function persons()
    {
        return $this->hasOne('Person');
    }

    public $timestamps = false;
}

模范人物

class Person extends Eloquent {

    protected $table = 'persons';

    protected $primaryKey = 'person_id';

    public function users()
    {
        return $this->belongsTo('User');
    }

    public $timestamps = false;
}

我只想改变这个:$user-

共有1个答案

丁慈
2023-03-14

使用查询生成器,您可以获得插入的最后一条记录的id:

$id = DB::table('users')->insertGetId(array('email' => 'john@example.com', 'votes' => 0));

但是如果您使用的是Elount,我认为您应该使用associate方法,这是从Laravel帮助中获取的代码示例,您应该根据您的用户、人员逻辑对其进行调整:

$account = Account::find(10);
$user->account()->associate($account);
$user->save()

希望有帮助。

 类似资料:
  • 我刚开始冬眠并尝试使用标准。我一直在从2个表(即主外键在realtion中的表)中获取结果。 我有Carpooler和SourceToDestination细节DTO,现在基于用户搜索数据,我想填充Carpooler Object,其中包含SourceToDestination细节,但我没有得到它,不知道如何使用标准API。 通过以上标准API,我只得到了SourceToDestination细节

  • null null 我没有任何可以作为主键字段。 这里的“eme_request”和“eme_attachment”是主表。 我想知道如何插入表格? 这些表(eme_request、eme_gf_relevent、eme_non_gf_relevent、eme_attachment)将在一个表单请求中插入。 所以我不了解如何在主表中生成主键以及如何将主键作为外键插入子表?

  • 我有两个不同的表,每个表有20k个条目,我错误地在同一个表中将summaryId作为主键和外键,但现在我想删除主键约束,它也是自动增量的。当我尝试drop primary key语法时,它返回一个错误: #1025-重命名'.\tg#sql-a38_7f'到'.\tg\rest_web_availability_summary_pm'时出错(errno: 150) 我尝试了以下查询。 如果有人有任

  • 这听起来很无聊,但我想知道我是否可以让主键在Laravel中作为外键工作,我对Laravel是新手。 因此,我有两个迁移“User”和“Student”,如下所示:User: 学生: 所以,我所想要的是,学生(uniqueId)中的主键也可以用作引用User表中的uniqueId列的外键。 提前谢谢。

  • 我有一个从应用程序中提取的数据库(我没有创建它)。我需要提取数据以用于不同的应用程序。主表包含3个外键,每个外键链接到其他表。我想用其他表中的特定列值替换FK ID。主表如下所示: 数据: 状态、雇员和类型都是外键。它们链接到具有以下布局的表: 用户: 类型: 地位: 我希望主桌看起来像这样 我已经尝试了我在谷歌上找到的各种东西,但是我不能让它以我想要的方式出现。我来自PHP背景,但我在SQL方面

  • 问题内容: 为简化起见,我有两个使用外键一对一关联的表,例如: 一个用户可能有很多动作,也可能没有。我需要一个sql select来返回在actions表中没有user_id值的用户id。 所以我需要一个返回用户ID 2(Smith)的SQL查询,因为外键值不包含ID 2 我尝试了以下SQL,但它返回了所有用户ID: 问题答案: