【问题标题】:Return all table's rows in a Select field laravel Nova返回选择字段 laravel Nova 中的所有表行
【发布时间】:2020-06-29 21:45:46
【问题描述】:

我想返回我选择的“类别”表中除当前行之外的所有元素。 我在互联网上没有找到任何关于此的信息,所以我来找你。

我当前选择的项目:

Select::make('Parent Category')
                ->options([

            ])
                ->displayUsingLabels(),

这是我的类别表的头部:

【问题讨论】:

  • 我使用 github.com/dillingham/nova-ajax-select 。您创建一个 api 端点并返回 Category::all();但是,在这种情况下您可以使用 BelongsTo 关系吗?
  • @Cameron 你用过这个数据透视表吗?
  • @dan 我相信理论上是一样的,您将参数传递给自定义 API 路由,获取您的 pivit 数据并返回响应。他在 git repo 自述文件中有一些示例

标签: php laravel laravel-nova


【解决方案1】:

我了解您在 Category 模型与其自身之间存在自引用关系,例如

class Category extends Model
{

    public function parent()
    {
        return $this->belongsTo(Category::class, 'parent_id');
    }

    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }
}

在 Nova 中,通常不会将 Child 与其 Parent 之间的关系表示为 Select 字段,而是表示为 BelongsTo,例如:

    BelongsTo::make('Parent Category', 'parent', Category::class)->searchable()->nullable(),

但是您可以使用 Select 字段来预加载类别数组,以便您可以过滤掉当前类别 onlyOnForms()。

你可以这样做:

 public function fields(Request $request)
 {
     
        $fields = [
            
            // [ All your fields ]
            
            // We'll use a Select but onlyOnForms to show all categories but current category when in Forms
            Select::make('Parent', 'parent_id')->options(Category::where('id', '!=', request()->resourceId)->pluck('name', 'id'))->onlyOnForms(),

            // Use a BelongsTo to show the parent category when in Details page
            BelongsTo::make('Parent', 'parent', Category::class)->searchable()->nullable()->showOnDetail()->hideWhenCreating()->hideWhenUpdating(),
       
        ];


}

【讨论】:

  • 如果你想为基于父母的孩子添加另一个选择呢?
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 2023-04-04
  • 2019-05-19
  • 2021-11-19
  • 2020-08-06
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多