BelongsTo 字段上的可搜索方法在 Laravel Nova 中不起作用,不返回任何项目

问题描述 投票:0回答:3

我有一个名为 Customer 的模型,它与 Notes 模型有 HasMany 关系

public function notes()
{
    return $this->hasMany(Note::class);
}

并且 NoteCustomer 具有 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()

我该如何解决这个问题

php laravel laravel-nova
3个回答
2
投票

您的 BelongsTo 字段位于不同的表中,因此如果您想在 Note 资源中使用 Customer 字段搜索某些内容,您的搜索将无法进行。在本例中,我使用 SearchesRelations 包进行搜索。您可以安装此软件包并将此代码放入您的 Resource

  public static $searchRelations = [
    'customer' => ['name', 'another_customer_field'],
];

请查看文档了解更多详细信息 SearchesRelations .


2
投票

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


0
投票

您调用 srearchable() 的字段必须位于资源的搜索数组中。

因此,如果您的字段是 BelogsTo,则必须将您所属资源的 title 字段放入 sreach 数组中

在我的例子中,标题字段是

public static $title = 'name';

所以我把它放进去

public static $search = [
    'id',
    'name',
];

一切都按预期进行

© www.soinside.com 2019 - 2024. All rights reserved.