我有一个名为 Customer 的模型,它与 Notes 模型有 HasMany 关系
public function notes()
{
return $this->hasMany(Note::class);
}
并且 Note 与 Customer 具有 BelongsTo
关系public function customer()
{
return $this->belongsTo(Customer::class);
}
然后我在Note nova资源
中定义了相同的关系BelongsTo::make('Customer', 'customer', Customer::class)
直到这里,如果想在 BelongsTo 字段上调用
->searchable()
,那么现在一切都可以完美运行,它不会从搜索中返回任何内容
BelongsTo::make('Customer', 'customer', Customer::class)->searchable()
我该如何解决这个问题
您的 BelongsTo 字段位于不同的表中,因此如果您想在 Note 资源中使用 Customer 字段搜索某些内容,您的搜索将无法进行。在本例中,我使用 SearchesRelations 包进行搜索。您可以安装此软件包并将此代码放入您的 Resource 类
public static $searchRelations = [
'customer' => ['name', 'another_customer_field'],
];
请查看文档了解更多详细信息 SearchesRelations .
在 Laravel Nova 4 上,您可以使用关系来执行此操作:
例如,您有采购订单和供应商,并且想要在采购订单资源上搜索供应商:
采购订单型号:
public function supplier()
{
return $this->belongsTo(Supplier::class, 'supplier_id', 'id');
}
采购订单 Nova 资源:
public static $search = [
'supplier.name',
];
您可以在 Laravel Nova 文档中查看更多相关信息:https://nova.laravel.com/docs/4.0/search/#searching-relationships
您调用 srearchable() 的字段必须位于资源的搜索数组中。
因此,如果您的字段是 BelogsTo,则必须将您所属资源的 title 字段放入 sreach 数组中
在我的例子中,标题字段是
public static $title = 'name';
所以我把它放进去
public static $search = [
'id',
'name',
];
一切都按预期进行