Вопрос:

Как вставить данные в несколько таблиц в Laravel с одного контроллера?

php mysql laravel model

3418 просмотра

2 ответа

12 Репутация автора

[Я новичок в Laravel]

Я использую Laravel 5.5

У меня есть ProductController и модель Product, также у меня есть две таблицы продуктов и pcategories . Я хочу вставить данные в таблицу pcategories из ProductController . Как это сделать правильно? Я использовал 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');
    }

}
Автор: Prince John Источник Размещён: 11.01.2018 05:34

Ответы (2)


1 плюс

7153 Репутация автора

Решение

Используйте 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();

Чтобы узнать больше, следуйте этому официальному документу.

И для вашей второй части, да , вы можете.

Автор: Sohel0415 Размещён: 11.01.2018 05:40

0 плюса

55 Репутация автора

Во-первых, создайте правильные отношения с вашими моделями (один ко многим и т. Д.) Во-вторых, вы можете использовать DB :: transact для вставки данных в несколько таблиц в БД. У него есть свои преимущества, а не просто вставка Fk в таблицы для заполнения данных. Для получения дополнительной информации вы можете искать в Google.

Автор: Larigyn Размещён: 05.05.2019 10:26
Вопросы из категории :
32x32