Добавить дату в таблицу, которая относится к продукту в Laravel 6 - PullRequest
0 голосов
/ 03 мая 2020

У меня есть товар и аукционный стол. Я хочу добавить крайний срок аукциона для указанной таблицы c, используя форму. когда я отправляю форму, product_id в таблице аукциона не заполняется, а крайний срок показывает время, в которое форма была отправлена.

Вот что я пытаюсь:

Я хочу, чтобы форма создания получила срок и сохраните в таблице аукциона с идентификатором продукта, чтобы я мог получить к нему доступ в методе show продукта.

create.blade. php

    @extends('layouts.app')

    @section('content')
      <div class="mt-3" style="margin-left: 50px;">
       <h2>Add new product</h2>
    {!! Form::open(['action' => 'ProductsController@store', 'method' => 'POST', 'enctype' => 
    'multipart/form-data', 'class' => 'w-50 py-3']) !!}
      <div class="form-group">
        {{Form::label('name', 'Product Name')}}
        {{Form::text('name', '', ['class' => 'form-control', 'placeholder' => 'Product Name'])}}
      </div>
      <div class="form-group">
        {{Form::label('description', 'Product Description')}}
        {{Form::textarea('description', '', ['class' => 'form-control', 'placeholder' => 'Product Description', 'rows' => '4'])}}
      </div>
      <div class="form-group">
        {!! Form::Label('category', 'Category') !!}
        <select class="form-control" name="category_id">
          @foreach($categories as $category)
            <option value="{{$category->id}}">{{$category->name}}</option>
          @endforeach
        </select>
      </div>
      <div class="form-group">
        {{Form::label('price', 'Product Price')}}
        {{Form::number('price', '', ['class' => 'form-control', 'placeholder' => 'Product Price'])}}
      </div>
      <div class="form-group">
        {{Form::label('deadline', 'Auction Deadline')}}
        {{Form::date('{{$auction->deadline}}', '', ['class' => 'form-control'])}}
      </div>
      <div class="form-group">
        {{Form::label('image', 'Product Image')}}
        {{Form::file('image', ['class' => '', 'placeholder' => 'Product Image'])}}
      </div>
      {{Form::submit('Upload Product', ['class' => 'btn btn-primary'])}}
    {!! Form::close() !!}
 </div>   
 @endsection

Модель продукта

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = [
        'name', 'price', 'description', 'image',
    ];

    public function category()
    {
        return $this->belongsTo('App\Category');
    }

    public function auction()
    {
        return $this->hasOne('App\Auction');
    }
}

ПродуктыКонтроллер

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use App\Product;
use App\Category;
use App\Auction;

class ProductsController extends Controller
{
    public function index()
    {
        $categories = Category::all();

        $products = Product::with('category')->latest()->paginate(3);

        return view('products.index' ,compact('categories', 'products'));
    }

    public function create()
    {
        $categories = Category::all(['id', 'name']);
        return view('products.create', compact('categories',$categories));
    }

    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required',
            'description' => 'required',
            'category_id' => 'required',
            'price' => 'required',
            'image' => 'image|nullable',
        ]);

        // Create Product
        $product = new Product();
        $product->name = request('name');
        $product->description = request('description');
        $product->category_id = request('category_id');
        $product->price = request('price');
        $product->image = $fileNameToStore;
        $product->save();

        $auction = new Auction();
        $auction->deadline = request('deadline');
        $auction->save();

        return redirect('/products')->with('success', 'Product Created');
    }

    public function show($id)
    {
        $product = Product::find($id);

        return view('products.show', compact('product'));
    }
}

1 Ответ

0 голосов
/ 03 мая 2020

вы просто создаете аукцион, где связь? Удалить $product->save(); строку. После $auction->save(); добавьте эту строку:

$product->auction()->associate($auction);
$product->save();

Финальный метод хранения

    public function store(Request $request)
    {
        $this->validate($request, [
        'name' => 'required',
        'description' => 'required',
        'category_id' => 'required',
        'price' => 'required',
        'image' => 'image|nullable',
    ]);

    // Create Product
    $product = new Product();
    $product->name = request('name');
    $product->description = request('description');
    $product->category_id = request('category_id');
    $product->price = request('price');
    $product->image = $fileNameToStore;

    $auction = new Auction();
    $auction->deadline = request('deadline');
    $auction->save();

    $product->auction()->associate($auction);
    $product->save();

    return redirect('/products')->with('success', 'Product Created');
}

Обновление для проблемы неактуальных блейдов

Эта строка неправильный:

{{Form::date('{{$auction->deadline}}', '', ['class' => 'form-control'])}}

Вы используете метку закрытия строки лезвия в метке строки лезвия. Должно быть:

{{Form::date('deadline', '', ['class' => 'form-control'])}}

Если переменная аукциона передавалась из контроллера, это будет работать

...