php - Laravel 6 one-->资源控制器中的多关系
问题描述
我目前有一个应用程序,它可以有一个带有许多选项的修饰符。一个示例用例是带有奶酪、生菜、盐和胡椒选项的 Toppings 修饰符。一个修饰符可以有 1 --> N 个选项。
我想要一个显示Modifier
名称并允许同时编辑/删除Option
记录的表单。我想将其嵌入到我当前的表单中以添加/编辑修饰符。
有没有一种简单的方法可以做到这一点,这样我就可以只有一个同时管理选项的修改器资源控制器?
网页.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');
}
}
解决方案
我认为你可以使用一个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
}
推荐阅读
- php - 无法使用 php 和 oci 选择“TEXT”列?
- c# - StreamReader.ReadLine() 非常奇怪的行为
- python - 如何在 python 列表中查找特定字符串,如果找到打印位置,否则打印 0
- java - 在世界的边缘转身
- html - 如何强制图像以纵向显示?
- php - 致命错误:未捕获的错误:无法将 mysqli_result 类型的对象用作数据库的数组
- google-sheets - 基于另一张工作表中的规则的单元格中文本的总和
- java - JBoss AS 7.1.1 启动后关闭
- python - Webscraping:如何在没有浏览器仿真的情况下执行按钮背后的功能?
- spring-mvc - 总是在 url 中添加斜杠