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

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

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

在选择下拉列表中,该应用程序的所有用户都将列出,而不仅仅是显示具有“伙伴”角色的用户。如何解决此问题?
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资源字段方法:
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'),
    ];
}

最佳答案

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

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

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

关于Laravel Nova-仅在表单下拉列表中加载具有某些属性的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53331599/

10-16 16:31