创建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
相关联,或者如果不存在则创建一个新端点。但是要测试我刚刚用邮递员给出的答案,您可以使用以下表单数据title
、description
和category_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时同时在两个表中插入数据的主要内容,如果未能解决你的问题,请参考以下文章