简体   繁体   English

如何从单个控制器将数据插入到 Laravel 中的多个表中?

[英]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还有两个表productspcategories 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_atupdated_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_atupdated_at是“一部分” Eloquent You either use Eloquent or insert manually those fields.您可以使用Eloquentmanually插入这些字段。

If you want to use Eloquent , then make two model Product and PCategory .如果你想使用Eloquent ,那么制作两个模型ProductPCategory 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.

相关问题 如何在laravel中使用雄辩或DB Facade从单一表格插入多个表 - how to insert into multiple table using eloquent or DB facade in laravel from a single form Laravel 5如何在单个查询中插入(多个)两个相关表 - Laravel 5 How to insert (multiple) two related table into a single query 如何使用 DB::Tranactions 将数据插入单个控制器中的两个表 - how to insert data to two table in a single controller using DB::Tranactions 如何在表的同一列的多行中从单一格式插入相同名称的多个数据 - How to insert multiple data of same name from single form in multiple row of same column of table 在 pivot 表中插入数据 Controller Laravel 8 - Insert data in pivot table Controller Laravel 8 如何在yii2中将数据从单一表格和控制器插入2个表 - how to insert data to 2 tables from single form and controller in yii2 SQL如何将多个表中的数据插入并选择到一个表中并使用不同的列? - SQL How to insert and select data from multiple tables into a single table and using different colomns? Laravel插入多个表和多个数据 - Laravel Insert Multiple Table And Multiple Data Laravel:如何从多个表中查询数据? - Laravel: How to query data from multiple table? 如何从 Laravel 中的控制器访问用户表中的字段数据? - How to access a field data from users table from a controller in Laravel?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM