如何使用laravel中的多个关系将记录保存在数据库中

Posted

技术标签:

【中文标题】如何使用laravel中的多个关系将记录保存在数据库中【英文标题】:How to save record in database using belongs to many relation in laravel 【发布时间】:2019-08-26 06:34:51 【问题描述】:

我有三张桌子:restaurant_locationcuisine_restaurant_location 和美食。

我的美食表中有一份所有美食的列表。我的 restaurant_location 表中有餐厅的所有详细信息。一家餐厅可以有很多菜系,所以我制作了一张美食餐厅位置表,其中有两列美食 ID 和餐厅 ID。我在我的 restaurant_location 模型中创建了一个多属关系。

餐厅位置模型

public function cuisines()

    return $this->belongsToMany(Cuisine::class, 'cuisine_restaurant_location', 'restaurant_id', 'cuisine_id');

我有一个表格,其中应该添加餐厅的所有细节以及美食。现在我正在添加餐厅的所有细节。现在的问题是如何在“cuisine_restaurant_location”中插入美食。

控制器

$rest = new restaurant_location;
$rest->name = $request->input('name');
$rest->description = $request->input('desc');
$rest->save();
$cuisine = new cuisine_restaurant_location
$cuisine_lists = $request->input('cuisines');
foreach ($cuisine_lists as $cuisine_list) 
    $cuisine->name = $cuisine_list;

【问题讨论】:

可能重复:***.com/questions/24702640/… 【参考方案1】:

为此,您可以使用syncattach 方法described in the Many to many section of the eloquent documentation:

$rest->cuisines()->attach([$cuisineIds])

cuisineIds 是您想要关联的美食的 ID 列表。 syncattach 之间的区别在于 sync 将删除您传递的 id 数组中不存在的所有 id。

【讨论】:

我有一个美食 ID 列表,我想将其与餐厅 ID 一起插入。我用这个 $rest->cuisines()->attach(['cuisine_id'=>$cuisine_ids]);这会导致错误(cuisine_idlocation_id01)值(cuisine_id、30、1、2))。 ) 列未找到。你能告诉我如何解决这个问题吗?? 您应该直接将 id 作为普通数组插入,而不是键值数组,例如:$cuisineIds = [1,2,3] 它仍在添加第0列。未找到列:1054 '字段列表'中的未知列'0'(SQL:插入cuisine_restaurant_locationcuisine_idrestaurant_id,@987654337 @) 值 (0, 31, 1))。 您可以在附加之前转储您的$cuisine_ids 数组并在此处发布结果吗?如果您只想附加 id 为 1 和 2 的美食,则数组应类似于 [1, 2]【参考方案2】:

试试sync()方法:

$h = [];
if (isset($input["cuisine_id"])) 
    $h = $input["cuisine_id"];

$restaurant_location->cuisines()->sync($h);

【讨论】:

以上是关于如何使用laravel中的多个关系将记录保存在数据库中的主要内容,如果未能解决你的问题,请参考以下文章

如何在更新 Laravel 中的记录时将表单发布数据加载到模型中

如何在laravel中从多对多关系中检索多个记录

根据Laravel Vue Js Api中的关系从多个表中删除数据

如何使用 laravel 8 同时保存一对多关系数据

如何使用关系在laravel中的数据库中插入嵌套的二维数组

Laravel:如何从具有关系的 3 个表中获取数据