在Laravel中进行关联插入
在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))
问题的出现原因:
在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"错误。确保正确定义了模型之间的关联,并添加必要的反向关联,可以帮助我们顺利地执行插入操作。
问题的出现原因是需要在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