доступный для поиска метод в BelongsTo filed доза не работает в laravel nova, не возвращая никаких элементов
У меня есть модель под названием Customer, у которой есть отношение HasMany к моделиNotes
public function notes()
{
return $this->hasMany(Note::class);
}
и примечание имеет BelongsTo отношение к Клиенту
public function customer()
{
return $this->belongsTo(Customer::class);
}
затем я определил те же отношения в ресурсе Note nova
BelongsTo::make('Customer', 'customer', Customer::class)
пока здесь все работает отлично, если хотите позвонить ->searchable()
в поле BelongsTo ничего не возвращает из поиска
BelongsTo::make('Customer', 'customer', Customer::class)->searchable()
Как я могу решить эту проблему
3 ответа
Поле , которое вы вызываете srearchable(), должно быть в массиве поиска вашего ресурса.
поэтому, если ваше поле - BelogsTo, вы должны поместить поле заголовка ресурса, к которому вы принадлежите, в массив sreach
в моем случае поле заголовка
public static $title = 'name';
так что я положил это в
public static $search = [
'id',
'name',
];
и все работает как ожидалось
Ваше поле BelongsTo находится в другой таблице, поэтому, если вы хотите найти что-то в Note Resource with Customer, ваш поиск не будет работать. В данном случае для поиска я использую пакет SearchesRelations. Вы можете установить этот пакет и поместить этот код в свой класс ресурсов
public static $searchRelations = [
'customer' => ['name', 'another_customer_field'],
];
Пожалуйста, проверьте документацию для более подробной информации SearchesRelations.
В Laravel Nova 4 для этого можно использовать отношения:
Например, у вас есть заказы на поставку и поставщики , и вы хотите найти поставщика на ресурсе заказа на поставку:
Модель PurchaseOrder:
public function supplier()
{
return $this->belongsTo(Supplier::class, 'supplier_id', 'id');
}
Ресурс PurchaseOrder Nova:
public static $search = [
'supplier.name',
];
Подробнее об этом можно узнать в документации Laravel Nova: https://nova.laravel.com/docs/4.0/search/#searching-relationships .