如何从单个控制器将数据插入到 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 还有两个表 productspcategories。我想将数据从 ProductController 插入到 pcategories 表中。如何正确执行此操作?我使用了DB::table('pcategories')->在此处输入代码insert($data);,但它没有插入created_atupdated_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_atEloquent 的“一部分”。您可以使用Eloquent 或插入manually 这些字段。

如果要使用Eloquent,则制作两个模型ProductPCategory。然后插入您的模型。

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 中的视图

如何使用关系在laravel中的数据库中插入嵌套的二维数组

如何在 laravel 的单个控制器中传递多个路由

如何在 Laravel 中将数据从 1 个视图插入到 2 个表中

如何将数据从ajax get方法发送到laravel中的控制器?

如何从 db 中的两个表中路由、获取和显示数据到 laravel 5.2 中的单个网页