如何从单个控制器将数据插入到 laravel 中的多个表中?
Posted
技术标签:
【中文标题】如何从单个控制器将数据插入到 laravel 中的多个表中?【英文标题】:How to insert data into multiple table in laravel from single Controller? 【发布时间】:2018-06-20 09:18:05 【问题描述】:[我是 Laravel 新手]
我正在使用 Laravel 5.5
我有 ProductController 和模型 Product 还有两个表 products 和 pcategories。我想将数据从 ProductController 插入到 pcategories 表中。如何正确执行此操作?我使用了DB::table('pcategories')->
在此处输入代码insert($data);
,但它没有插入created_at
和updated_at
值。
另一个问题:我可以将多个模型调用到一个控制器中吗?
这是我的控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use App\Product;
use Image;
class ProductController extends Controller
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
$product->categorieslist = Product::table('pcategories')->get();
return view('product.add')->with($data);
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
$product->categorieslist = Product::table('pcategories')->get();
return view('product.add')->with($data);
public function all()
$product->products = Product::table('products')->get();
return view('product.all', $data);
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
$this->validate($request, [
'producttitle' => 'required',
'price' => 'required',
'photo' => 'image|mimes:jpeg,png,jpg,gif,svg',
]);
$product = new Product;
$image = $request->file('photo');
if ($request->file('photo'))
$product->photo = time() . '.' . $image->getClientOriginalExtension();
$imagePath = public_path('/images/product');
$img = Image::make($image->getRealPath());
$img->resize(250, 250, function ($constraint)
$constraint->aspectRatio();
)->save($imagePath . '/' . $product->photo);
$product->title = $request->input('producttitle');
$product->description = $request->input('description');
$product->category = $request->input('category');
$product->price = $request->input('price');
$product->saleprice = $request->input('saleprice');
$product->weight = $request->input('weight');
$product->dimension = $request->input('dimension');
$product->color = $request->input('color');
$product->save();
return redirect('/product/')->with('success', 'Successfully Added');
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
$product = Product::find($id);
return view('product.show')->with('product', $product);
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
$data['product'] = Product::find($id);
$data['categorieslist'] = Product::table('pcategories')->get();
return view('product.edit')->with($data);
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
$this->validate($request, [
'producttitle' => 'required',
'price' => 'required',
'photo' => 'image|mimes:jpeg,png,jpg,gif,svg',
]);
$product = Product::find($id);
$image = $request->file('photo');
if ($request->file('photo'))
$product->photo = time() . '.' . $image->getClientOriginalExtension();
$imagePath = public_path('/images/product');
$img = Image::make($image->getRealPath());
$img->resize(250, 250, function ($constraint)
$constraint->aspectRatio();
)->save($imagePath . '/' . $product->photo);
$product->title = $request->input('producttitle');
$product->description = $request->input('description');
$product->category = $request->input('category');
$product->price = $request->input('price');
$product->saleprice = $request->input('saleprice');
$product->weight = $request->input('weight');
$product->dimension = $request->input('dimension');
$product->color = $request->input('color');
$product->save();
return redirect('/product/all')->with('success', 'Successfully Updated');
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
Product::find($id)->delete();
return redirect('/product/all')->with('success', 'Successfully Deleted');
public function category()
$data['categories'] = DB::table('pcategories')->get();
return view('product.category')->with($data);
public function storecategory(Request $request)
$this->validate($request, [
'category' => 'required',
]);
$data = array();
$data['category'] = $request->input('category');
DB::table('pcategories')->insert($data);
return redirect('/product/category')->with('success', 'Successfully Added');
public function categorydestroy($id)
DB::table('pcategories')->where('id', $id)->delete();
return redirect('product/category/')->with('success', 'Successfully Deleted');
【问题讨论】:
你能告诉我你的控制器代码吗?? 公共函数 storecategory(Request $request) $this->validate($request, [ 'category' => 'required', ]); $数据 = 数组(); $data['category'] = $request->input('category'); DB::table('pcategories')->插入($data); return redirect('/product/category')->with('success', '成功添加'); 您的问题不清楚。另外,你尝试过什么来达到你想要的结果?你对你的问题的研究表明了什么?你能提供你的尝试代码吗? How do I ask a good question、How much research effort is expected 和 How to create a Minimal, Complete, and Verifiable example 可能有助于改进您的问题。 嗨,这是我的控制器 【参考方案1】:使用Eloquent Model
而不是Query Builder
。字段created_at
,updated_at
是Eloquent
的“一部分”。您可以使用Eloquent
或插入manually
这些字段。
如果要使用Eloquent
,则制作两个模型Product
和PCategory
。然后插入您的模型。
PCategory::create($data);
你需要mass assigned
你在模型类上的字段。如果你不想批量分配你的字段,那就这样做-
$pcategory = new PCategory();
//$pcategory->column1 = $data['column1'] or $data->column1;
$pcategory->save();
要了解更多,请关注this官方文档。
对于您的第二部分,是的,您可以。
【讨论】:
很高兴它能帮助你:) 你有更新的PCategory文档链接吗? @TheCrazyProfessor 看看这个链接laravel.com/docs/5.8/eloquent#inserting-and-updating-models【参考方案2】:首先,与您的模型建立适当的关系(一对多等) 其次,您可以使用 DB::transact 将数据插入到 DB 中的多个表中。它有它自己的优点,而不是仅仅在表格中插入Fk来填充数据。如需更多信息,您可以在 google 中搜索。
【讨论】:
以上是关于如何从单个控制器将数据插入到 laravel 中的多个表中?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 中将数据从 1 个视图插入到 2 个表中