gpt4 book ai didi

php - 使用 Laravel 表单模型绑定(bind)和复选框更新多对多 Eloquent 关系

转载 作者:IT王子 更新时间:2023-10-29 00:11:40 25 4
gpt4 key购买 nike

我有 3 个表:

  • 编号
  • 姓名
  • 图片

颜色

  • 编号
  • 姓名
  • 图片

door_colors

  • 编号
  • door_id
  • color_id

和 2 个具有多对多关系的模型(每扇门都有多种颜色,并且许多颜色重叠门到门):

门模型

class Door extends Eloquent {
public function colors()
{
return $this->belongsToMany('Color', 'door_colors');
}
}

颜色模型

class Color extends Eloquent {
public function doors()
{
return $this->belongsToMany('Door', 'door_colors');
}
}

我想创建一个表单,我可以在其中编辑门,并通过复选框更新可用颜色。这是我的Admin Doors Controller

class AdminDoorsController extends AdminController {
public function edit($id)
{
$data['door'] = Door::find($id);
$data['colors'] = Color::all();
return View::make('admin/doors/form', $data);
}
}

Admin Doors 表单 View

{{ Form::model($door) }}
Colors:
@foreach ($colors as $color)
{{ Form::checkbox('colors[]', $color->id) }} {{ $color->name }}
@endforeach
{{ Form::close() }}

问题 1:如何做到在输出复选框时,选中与当前门存在关系的复选框,不选中与当前门没有关系的复选框。

问题 2:选中复选框并点击提交后,我将如何更新关系? $door->colors()->detach(); 清除这扇门所有现有的,然后 $door->colors()->attach($color_id_array); 根据颜色 id 数组创建新的?

欢迎任何意见!

最佳答案

问题 1:您应该将其传递到包含您的表单的 View 中,尽管它也可以直接在 View 中传递,但这并不是真正的最佳实践。做类似这样的事情...

$checkeds = Door::find(1)->colors()->lists('id');

...您找到的门就是正在更新的门。然后在循环中输出复选框之前,添加

$checked = in_array($color->id, $checkeds) ? true : false;

然后你会改变

{{ Form::checkbox('colors[]', $color->id) }} 
{{ $color->name }}`

{{ Form::checkbox('colors[]', $color->id, $checked) }}
{{ $color->name }}

问题2:这个其实有一个完美的方法给你。使用

$door->colors()->sync(Input::get('colors'));

它将一次性删除旧的并添加所有新的。

关于php - 使用 Laravel 表单模型绑定(bind)和复选框更新多对多 Eloquent 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com