在具有关系的多个表中创建新记录

时间:2019-09-30 11:44:14

标签: laravel eloquent eloquent--relationship

我发疯了,有些东西逃脱了我。

我有一个User模型,它与另一个称为Domain的模型具有hasMany关系

我认为可以用一个命令将两个表中的数据保存起来,但是我发现不是。

修补匠

use App\Models\Albarid\Domain;
$domain = new Domain;
use App\Models\Albarid\User;
$user = new User;
$user->name = 'Jhon Doe';
$user->email = 'mailo@ggmaiol.com'
$user->password = 'hajsdkjhaksdjkhas';
$user->c_password = 'hajsdkjhaksdjkhas';
$domain->domain = 'newdomain.com';

$user->domains()->save($domain)

Illuminate/Database/QueryException with message 'SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null (SQL: insert into `domains` (`domain`, `user_id`, `updated_at`, `created_at`) values (nuewdomain.com, ?, 2019-09-30 11:31:47, 2019-09-30 11:31:47))'

是否可以通过一种命令将数据保存在两个表中,还是需要创建第一个用户?

但没有。

由于连接问题似乎并非如此,因此我编写了最广泛的代码。

>>> use App\Models\Albarid\Domain;
>>> $col = Schema::getColumnListing('domain')
=> []
>>> $domain = new Domain;
=> App\Models\Albarid\Domain {#3140}
>>> use App\Models\Albarid\Domain;
>>> $domain = new Domain;
=> App\Models\Albarid\Domain {#3136}
>>> $domain->getTableColumns()
=> [
     "id",
     "user_id",
     "domain",
     "description",
     "disclaimer",
     "aliases",
     "mailboxes",
     "maillists",
     "maxquota",
     "quota",
     "transport",
     "backupmx",
     "settings",
     "created_at",
     "updated_at",
     "deleted_at",
     "full_deleted_at",
   ]
>>> $user->getTableColumns()
=> [
     "id",
     "name",
     "email",
     "email_verified_at",
     "password",
     "remember_token",
     "is_super_admin",
     "created_at",
     "updated_at",
   ]

关系存在

public function domains()
{
    return $this->hasMany('App\Models\Albarid\Domain');
}

有一个问题。

我有多个构想,并且在用户模型中也使用trais HasApiTokens

看到这个之后,我认为问题是另外一个问题。对于给您带来的不便,我深表歉意。

2 个答案:

答案 0 :(得分:0)

您必须等待创建用户,然后将其ID添加到域表中

use App\Models\Albarid\Domain;
$domain = new Domain;
use App\Models\Albarid\User;
$user = new User;
$user->name = 'Jhon Doe';
$user->email = 'mailo@ggmaiol.com'
$user->password = 'hajsdkjhaksdjkhas';
$user->c_password = 'hajsdkjhaksdjkhas';
$user->save();
$domain->domain = 'newdomain.com';
$domain->user_id = $user->id;
$domain->save();

答案 1 :(得分:0)

首先,您需要定义关系,然后可以使用给定的链接代码在多个表中添加数据

https://laravel.com/docs/5.8/eloquent-relationships#updating-belongs-to-relationships

示例代码

$account = App\Account::find(10);

$user->account()->associate($account);

$user->save();
相关问题