在 laravel 中插入关系

Posted

技术标签:

【中文标题】在 laravel 中插入关系【英文标题】:Inserting with relationships in laravel 【发布时间】:2017-03-21 00:29:45 【问题描述】:

我在 Laravel 5.3 中遇到了一个问题,我查看了文档并搜索了网页,但没有找到任何内容。

我正在使用 Laravel 关系连接两个表。现在我希望在用户提交表单后同时将数据插入到两个表中。这个问题是第一个表是主要的“用户”,第二个“xyz”属于第一个表。表“xyz”包含连接两个表的“users_id”列。显然“users_id”是“users”表的“id”列。

现在出现的问题是我想同时在“用户”表(这很容易完成)和“xyz”表中插入数据。 User::create() 函数将轻松创建用户数据,它也可以工作,但是为了在“xyz”表中插入数据,我需要“user_id”列数据,并且在将用户创建为 ID 列之前不会生成 ID已激活自动增量属性。

代码:

    $user = new User;
    $inputArry = array('data1' => $request['field1'],
                    'data2' => $request['field2'],
                    'data3' => $request['field3'],
                    );
    $user->create($inputArry);
    $user->xyz()->create([
        'user_id' => $user->id,
        'name' => $request['name'],
        'about' => $request['desc'],
        'tag' => $request['tag'],
    ]);

上面是我为此目的使用的代码,但它给了我一个错误。

错误:

    QueryException in Connection.php line 761:
    SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'soft_id' cannot be null (SQL: insert into `xyz` (`user_id`, `name`, `about`, `tag`, `updated_at`, `created_at`) values (, John, I am John, dev, 2016-11-09 21:01:29, 2016-11-09 21:01:29))

【问题讨论】:

问题到底是什么?这是非常标准的数据库内容;如果不先保存父记录,您将无法创建子记录。在尝试将信息保存在表xyz 中之前,必须调用$user = User::create(...); 在第二个查询中使用 users-table/insert 查询中的“last insert id”作为 user_id ***.com/questions/27873777/… $user = User::create($data); $insertedId = $user->id; 是的,我打电话给$user = User:: create([…]);,然后如何将保存的用户ID添加到“xyz”表的“user_id”? 【参考方案1】:

您可以像这样创建它们,而不是同时保存它们...

$id = User::create($input_arr)->id;
Xyz::create([
    'user_id' => $id,
    ...
]);

【讨论】:

【参考方案2】:

插入相关表的一种方法是使用关系:

$user = User::create($user_inputs);

$xyz = $user->xyz()->create($xyz_inputs);

它会自动填充xyz表中的user_id

【讨论】:

Call to a member function create() on null ??【参考方案3】:

如果您需要插入许多项目,请使用 createMany 或 saveMany 方法。

例如:

$post = App\Post::find(1);

$post->comments()->createMany([
    [
        'message' => 'A new comment.',
    ],
    [
        'message' => 'Another new comment.',
    ],
]);

在官方 laravel 文档中:

https://laravel.com/docs/5.6/eloquent-relationships#inserting-and-updating-related-models

【讨论】:

以上是关于在 laravel 中插入关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 插入和检索关系

laravel Eloquent ORM 多表插入

Laravel 在数据透视表中为克隆字段的一个关系 ID 插入多行

Laravel - 具有关系的多表插入

Laravel Eloquent 关系 - 将数据插入多个表

Laravel 5分离/删除多态关系