创建API时同时在两个表中插入数据

Posted

技术标签:

【中文标题】创建API时同时在两个表中插入数据【英文标题】:Insert data in two table at the same time in creating an API 【发布时间】:2020-12-22 21:54:47 【问题描述】:

这是我第一次创建 API。我想同时在两个表中插入数据。

我有一个列表表和类别表。表的关系是一个 List => 有很多 Category

列出列

身份证 标题 说明

类别列

身份证 listing_id 类别名称

这是我目前在控制器中的代码

public function store(Request $request)
    
        return Listings::create($request->all());
    

上市模式

 protected $table = 'testing_table';

    public function categories()
        return $this->hasMany('App\Category', 'listing_id', 'id');
    

类别模型

 protected $table = 'sample_category';

路线

Route::post('listings', 'ListingsController@store');

注意:列表和类别将一起保存。

【问题讨论】:

那么你的请求也会有 category_name(s) 吗? @user3532758 是的。嗯,这可能吗?还是有其他方法可以插入两个表? 是的,检查一下刚刚发布的答案。但是,那个给你一个保存一个的适当例子。所以你根据你发送的所有类别名称推断saving many 【参考方案1】:

首先,您必须确保每个模型都设置了$fillables 属性以避免批量分配问题。其次,您必须将类别名称与请求一起发送。


public function store(Request $request)

    // You might want to do some validations

    $listing = Listings::create($request->all());

    $category = $listing->categories()->create([
        'category_name' => $request->input('category_name')
    ]);

    // And you can return the date however you see fit.
    return response()->json([
        'listing' => $listing,
        'category' => $category
    ]);


【讨论】:

嗨。谢谢您的回答。但我的类别表中只插入了 1 个类别。或者有没有合适的方法在邮递员中测试它? 您想创建多个类别吗?如果是这样,那么您必须为此使用不同的端点,然后在创建它时将其与新的listing 相关联,或者如果不存在则创建一个新端点。但是要测试我刚刚用邮递员给出的答案,您可以使用以下表单数据titledescriptioncategory_name 向此端点发出发布请求。 好的,明白了。你的代码很适合我。太感谢了。 ^_^【参考方案2】:
public function store(Request $request)

  try 
        $input = $request->all();
        \DB::beginTransaction();
         $id = Listing::create($input)->id;
         $cat = Category::create([
             'listing_id' => $id,
             'category_name' => $input['category_name'],
            ]);
        \DB::commit();
         return response()->json(['status' => 'success', 'code'=> '200', 'data' => 'as per your requirment'], 200);
    catch (\Throwable $th) 
     \DB::rollBack();
     echo "<pre>";print_r($th->__toString());die;
   

要插入更多行,我们必须检查另一种方法。请提供您的请求数据。 如果这有帮助,请告诉我

【讨论】:

非常感谢您的回答。你的代码给了我另一个关于如何做的想法。这也有帮助。 ^_^

以上是关于创建API时同时在两个表中插入数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句怎么同时往两个表中插入不同的记录

怎么把数据同时插入到数据库的两个表中

SQL语句怎么同时往两个表中插入不同的记录

如何在 SQL 服务器中将数据插入到两个不同的表中,同时在 SQL 中具有 ORDER# 主键

如何将记录同时插入到两个数据库表中?

如何使用 PHP 在 MYSQL 中的数据库表中插入、更新、删除记录时创建日志