在Laravel中进行关联插入

12 浏览
0 Comments

在Laravel中进行关联插入

我在Laravel 5.3中遇到了一个问题,我查看了文档,也在网上搜索了,但没有找到相关内容。

我正在使用Laravel的关联关系来连接两个表。现在,我希望在用户提交表单后,数据同时插入到两个表中。问题是第一个表是主表,比如说"users",而第二个表"xyz"是第一个表的belongsTo关系。表"xyz"包含连接两个表的"users_id"列。而且"users_id"就是"users"表的"id"列。

现在遇到的问题是,我希望将数据同时插入到"users"表(这很容易实现)和"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))

0
0 Comments

问题的出现原因:

在laravel中,当我们需要在一个模型中插入一个关联模型时,我们通常会使用Eloquent提供的associate方法来实现。然而,有时候我们可能会遇到一个问题,即插入关联模型时会出现"Be long relationship"的错误。

解决方法:

要解决这个问题,我们可以按照以下步骤操作:

1. 首先,我们需要找到出现问题的代码块。在上述的例子中,我们可以看到在$user模型上使用了associate方法来插入关联模型$account。

2. 接下来,我们需要确认是否在定义模型关联时使用了正确的关联方法。在上述例子中,我们可以看到使用了account方法来定义$user模型与$account模型之间的关联。

3. 如果我们确认关联方法是正确的,那么问题可能出现在关联模型的定义上。我们需要确保在Account模型中,已经定义了与User模型的反向关联。

4. 如果在Account模型中没有定义反向关联,我们需要添加相应的代码。在本例中,我们需要在Account模型中添加如下代码:

public function users()
{
    return $this->hasMany(User::class);
}

5. 最后,重新运行代码,问题应该就能够解决了。现在我们可以使用associate方法来插入关联模型,而不会出现"Be long relationship"的错误。

通过以上步骤,我们可以解决在laravel中插入关联模型时可能遇到的"Be long relationship"错误。确保正确定义了模型之间的关联,并添加必要的反向关联,可以帮助我们顺利地执行插入操作。

0
0 Comments

问题的原因是在使用关联关系插入相关表时,调用了一个空对象的create()方法。

解决方法是确保关联关系正确设置,并确保关联关系的方法名称正确。

具体代码如下:

$user = User::create($user_inputs);
$xyz = $user->xyz()->create($xyz_inputs);

这段代码将自动在xyz表中填充user_id字段。

在上面的示例中,xyz()是一个函数,Laravel框架处理了细节,此代码可以正常工作!

感谢Amit,你救了我的一天!

0
0 Comments

问题的出现原因是需要在laravel中插入多个相关模型,但不清楚如何实现。解决方法是使用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

0