簡體   English   中英

在具有關系的多個表中創建新記錄

[英]Create a new record in multiple tables with relationsship

我發牢騷說有什么東西讓我逃脫了。

我有一個用戶 model 與另一個名為 Domain 的 model

我認為可以在一個命令中保存兩個表中的數據,但我發現它不是或不是。

修補匠

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');
}

有一點問題。

我有多個連接,並且在用戶 model 中使用 trais HasApiTokens

看到這個后,我認為問題是其他問題。對於給您帶來的不便,我深表歉意。

您必須等待創建用戶,然后將其 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();

首先您需要定義關系,然后您可以使用給定的鏈接代碼在多個表中添加數據

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

示例代碼

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

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

$user->save();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM