[英]How to insert data into multiple table in laravel from single Controller?
[I am new in Laravel] [我是 Laravel 的新手]
I am using Laravel 5.5我正在使用 Laravel 5.5
I have ProductController and model Product also I have two tables products and pcategories .我有ProductController和模型Product还有两个表products和pcategories 。 I want to insert data into pcategories table from ProductController .
我想从ProductController将数据插入到pcategories表中。 How to do this properly?
如何正确地做到这一点? I have used
DB::table('pcategories')->
enter code here insert($data);
我使用过
DB::table('pcategories')->
在此处输入代码insert($data);
but it's not inserting created_at
and updated_at
value.但它没有插入
created_at
和updated_at
值。
Another question: Can I call multiple models into a controller?另一个问题:我可以将多个模型调用到一个控制器中吗?
This is my controller这是我的控制器
<?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');
}
}
Use Eloquent Model
instead of Query Builder
.使用
Eloquent Model
而不是Query Builder
。 Fields created_at
, updated_at
are "part" of Eloquent
.字段
created_at
, updated_at
是“一部分” Eloquent
。 You either use Eloquent
or insert manually
those fields.您可以使用
Eloquent
或manually
插入这些字段。
If you want to use Eloquent
, then make two model Product
and PCategory
.如果你想使用
Eloquent
,那么制作两个模型Product
和PCategory
。 And then insert with your model.然后插入您的模型。
PCategory::create($data);
And you need to mass assigned
your field on model class.If you don't want to mass assigned your fields, than do like this-并且您需要在模型类上
mass assigned
您的字段。如果您不想批量分配您的字段,请这样做-
$pcategory = new PCategory();
//$pcategory->column1 = $data['column1'] or $data->column1;
$pcategory->save();
To learn more, follow this official doc.要了解更多信息,请遵循此官方文档。
And for your second part, Yes , You can.对于你的第二部分,是的,你可以。
First, create a proper relationship with your models ( one to many, etc. ) Second, you can use the DB::transact to insert data into multiple tables in DB.首先,与您的模型建立适当的关系(一对多等)。其次,您可以使用 DB::transact 将数据插入到 DB 中的多个表中。 It has it's own advantages rather than just inserting Fk in tables to fill in the data.
它有它自己的优点,而不是仅仅在表格中插入Fk来填充数据。 For further info you can search in google.
有关更多信息,您可以在谷歌搜索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.