Laravel 6 one -> много отношений в контроллере ресурсов - PullRequest
0 голосов
/ 04 октября 2019

В настоящее время у меня есть приложение, которое может иметь модификатор со многими параметрами. Пример использования - модификатор Toppings с вариантами сыра, салата, соли и перца. Модификатор может иметь опции 1 -> N.

Я хочу иметь форму, которая отображает имя Modifier, а также позволяет редактировать / удалять Option записи одновременно. Я хочу вставить это в мою текущую форму для добавления / редактирования модификаторов.

Есть ли простой способ сделать это, чтобы у меня был только один контроллер ресурсов Модификатора, который также управляет параметрами?

web.php

Route::resource('modifiers', 'ModifierController')->middleware('auth');

Контроллер:

namespace App\Http\Controllers;
use App\Modifier;
use Illuminate\Http\Request;

class ModifierController extends Controller
{

    public function create()
    {
            $data = ['action' => route('modifiers.store'),'method' => 'POST', 'modifier' => new Modifier()];
      return view('modifiers.form',$data);
    }

    public function store(Request $request)
    {
            $modifier = new Modifier($request->all());
            $this->do_validate($request);
            $modifier->save();
            return redirect(route('modifiers.index'));
    }           
}

просмотры / модификаторы / form.blade.php

@extends('layouts.layout-2')

@section('content')

<div class="container">
    <div class="row justify-content-center">

            @include ('layouts.errors')

        <div class="col-md-12">

                    {!! Form::open(['url' => $action, 'method' => 'post', 'class' => 'form', 'id' => 'form'])!!}                                    
                    @csrf
                    @method($method)

                    <div class="form-group">
                        <label for="name">{{ __('modifiers.name')}}</label>
                        <input type="text" class="form-control" id="name" name="name" value = "{{old('name',$modifier->name)}}">
                     </div>



                  <button id="btnSubmit" class="btn btn-primary">{{ __('common.submit') }}</button>

                    {!! Form::close() !!}

        </div>
    </div>
</div>
@endsection

Модели:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Modifier extends Model
{
    use SoftDeletes;
    protected $guarded = ['id'];    

    public function options()
    {
        return $this->hasMany('App\Option');
    }       
}

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Option extends Model
{
    use SoftDeletes;
    protected $guarded = ['id'];

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

}

1 Ответ

0 голосов
/ 04 октября 2019

Я думаю, что вы можете использовать элемент select:

<select name="options[]" id="options" class="form-control">
    @foreach($options as $option)
        <option value="{{ $option->id }}" {{ $modifier->options->contains('id', $option->id) ? 'selected' : '' }}>{{ $option->name }}</option>
    @endforeach
</select>

Надеюсь, это поможет.

Затем, в каком-то контроллере:

public function update(Request $request, $id)
{
    $modifier = Modifier::find($id);
    $modifier->options()->sync($request->input('options'));

    // Do whatever more you want to do

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...