【问题标题】:How to add relationship between database table in Laravel如何在 Laravel 中添加数据库表之间的关系
【发布时间】:2023-03-07 15:10:01
【问题描述】:

我是 Laravel 的新手。我想在用户注册帐户时这样做,详细信息将保存到 2 个数据库表中。根据下面给出的图像,我想将 id 与 user_id 之间的关系联系起来:

所以当我转到 phpmyadmin 时,我点击 user_id 它将重定向我以查看基于 id 的用户表详细信息。

这是我的代码:

protected function create(array $data)
{
  $user= User::create([
        'username' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

    $employee= Employee::create([
        'username' => $data['name'],
        'email' => $data['email'],
    ]);

    return $user;
}

有人知道怎么做吗?

【问题讨论】:

  • 你有没有尝试过以下laravel.com/docs/8.x/eloquent-relationships
  • @NicklasKevinFrank 是的,我已经尝试过了,但它会出现错误
  • 你使用的是哪个 laravel 版本?
  • 您能否也包括您对员工表的迁移?此外,提示,如果您使用 $user->employee()-> create(...) 正确定义 Employee 的关系,您可以使用您的 $user 变量来创建一个 Employee
  • @sta 我用的是 7.4 版

标签: laravel


【解决方案1】:

你可以像这样定义 Eloquent One to One 关系:

app\Models\User.php

public function employee()
{
   return $this->hasOne(Employee::class, 'user_id', 'id');
}

app\Models\Employee.php

protected $fillable = ['user_id','username','email'];

现在将您的函数更改为:

protected function create(array $data)
{
  $user = User::create([
        'username' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
  ]);

  $user->employee()->create([
      'username' => $data['name'],
      'email' => $data['email'],
  ]);
}

【讨论】:

  • 我的员工数据库表中有列 user_id。现在我得到这个错误: Column not found: 1054 Unknown column 'user_user_id' in 'field list' (SQL: insert into employee (username, email, password, user_user_id, updated_at, created_at)
【解决方案2】:

如果您在使用关系创建模型时遇到问题。您可以在创建时将user_id 添加到数据中

protected function create(array $data)
{
    $user = User::create([
        'username' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
    ]);

    $employee = Employee::create([
        'username' => $data['name'],
        'email' => $data['email'],
        'user_id' => $user->id
    ]);

    return $user;
}

【讨论】:

  • 感谢您的回复。在此之前我这样做但是当我去 phpmyadmin 时,我检查表没有链接在一起
【解决方案3】:

我相信这个问题是关于 phpmyadmin 而不是 laravel 中的关系。

创建表时,迁移是否使用外键?

例如在你的员工表上类似的东西

$table->foreignId('user_id')->references('id')->on('users');

这是在数据库中创建外键的原因,而不是在 laravel 中创建关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2018-09-15
    • 2018-12-30
    • 2017-07-09
    • 2021-06-08
    • 2013-12-12
    相关资源
    最近更新 更多