Laravel Nova-仅在表单下拉列表中加载具有某些属性的关系 [英] Laravel Nova - Only load relationship with certain property in form dropdown

查看:211
本文介绍了Laravel Nova-仅在表单下拉列表中加载具有某些属性的关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的Nova应用程序的名为合作伙伴"的资源中添加了BelongsTo关系字段(关系名称:user).因此,在创建合作伙伴"表单中,我现在有了一个select元素来选择一个特定的用户.

I have added a BelongsTo relationship field(relationship name: user) in my Nova app in resource named "Partner". So in the "create partner" form now I have a select element to choose a specific user.

我写的关系包括一个条件:

The relationship I have written includes a condition:

$this->belongsTo('App\User')->where('role', 'partner');

在选择下拉列表中,该应用程序的所有用户都将列出,而不仅仅是显示具有伙伴"角色的用户.我该如何解决这个问题?

In the select dropdown, instead of only showing users with role "partner", all users of the app are listing. How can I fix this issue?

User table : id, name, role
Partner table : id, user_id, name

合作伙伴模型:

class Partner extends Model
{

  protected $fillable = [
    'name', 'email', 'user_id'
  ];

  public function User()
  {
      return $this->belongsTo('App\User')->where('role', 'partner');
  }

}

合作伙伴的新资源"字段方法:

Nova Resource fields method for Partner:

public function fields(Request $request)
{
    return [
        Text::make('Name')->sortable(),
        ID::make()->sortable(),
        BelongsTo::make('User', 'user', 'App\Nova\User')->rules('required'),
        HasMany::make('Clients'),
    ];
}

推荐答案

您需要在Partner Nova资源下添加User的relatableQuery.不需要Partner模型中的where条件.

You need to add the relatableQuery for User under Partner Nova resource. No need the where condition in Partner model.

use Laravel\Nova\Http\Requests\NovaRequest;
...

public static function relatableUsers(NovaRequest $request, $query)
{
    return $query->where('role', 'partner');
}

这篇关于Laravel Nova-仅在表单下拉列表中加载具有某些属性的关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆