Laravel Nova - только загружать отношения с определенным свойством в выпадающем списке - PullRequest
0 голосов
/ 16 ноября 2018

Я добавил поле отношений BelongsTo (имя отношения: пользователь) в мое приложение Nova на ресурсе с именем «Партнер».Поэтому в форме «Создать партнера» теперь у меня есть элемент 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 Resource для Партнера:

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'),
    ];
}

1 Ответ

0 голосов
/ 16 ноября 2018

Вам необходимо добавить relatableQuery для User в Partner Nova resource.Не требуется условие where в Partner модели.

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

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