Laravel Nova 字段 BelongsToMany 向下钻取数据
Laravel Nova field BelongsToMany drilling down the data
我正在使用 Laravel 开发 Web 应用程序。我正在使用 Laravel Nova 构建管理面板。但我对 BelongsToMany 字段有疑问。
我的数据库模式如下
Area
Station - has area_id because an area has many stations
manager - area_id because each user belongs to an area
Area_station - station_id and manager_id (many to many)
所以在 Station nova 资源中,我添加了这样一个字段。
BelongsToMany::make('Managers', 'managers', Manager::class),
因此,当我从 Nova 管理面板和 select "Attach manager" 转到站点详细信息页面时,在下一页的下拉列表中(将经理附加到部门的页面),我可以在数据库中看到所有可用的经理。
但是我不想在下拉列表中显示所有可用的经理,而是喜欢过滤与 selected 站属于同一区域的 managers/users。我的意思是,当我将一名经理附加到该站时,我必须 select 一个站。是否可以在 Nova 中过滤或实现我想要的?
覆盖 relatableQuery
函数,该函数将确定模型的哪些实例可以附加到 Manager
nova 资源下的其他资源。
方法一
public static function relatableQuery(NovaRequest $request, $query)
{
// In case manager is get attached to another resource except Station.
if ($request->resource() == 'App\Nova\Station') {
$station = $request->findResourceOrFail();
return $query->where('area_id', $station->area_id);
}
return parent::relatableQuery($request, $query);
}
更新
方法 2 - 刚刚学到了一些新东西。
您可以在 Station
Nova 资源下为关系添加相关查询。在这种情况下无需检查资源。
public static function relatableManagers(NovaRequest $request, $query)
{
$station = $request->findResourceOrFail();
return $query->where('area_id', $station->area_id);
}
我认为方法 2 更好。
我正在使用 Laravel 开发 Web 应用程序。我正在使用 Laravel Nova 构建管理面板。但我对 BelongsToMany 字段有疑问。
我的数据库模式如下
Area
Station - has area_id because an area has many stations
manager - area_id because each user belongs to an area
Area_station - station_id and manager_id (many to many)
所以在 Station nova 资源中,我添加了这样一个字段。
BelongsToMany::make('Managers', 'managers', Manager::class),
因此,当我从 Nova 管理面板和 select "Attach manager" 转到站点详细信息页面时,在下一页的下拉列表中(将经理附加到部门的页面),我可以在数据库中看到所有可用的经理。
但是我不想在下拉列表中显示所有可用的经理,而是喜欢过滤与 selected 站属于同一区域的 managers/users。我的意思是,当我将一名经理附加到该站时,我必须 select 一个站。是否可以在 Nova 中过滤或实现我想要的?
覆盖 relatableQuery
函数,该函数将确定模型的哪些实例可以附加到 Manager
nova 资源下的其他资源。
方法一
public static function relatableQuery(NovaRequest $request, $query)
{
// In case manager is get attached to another resource except Station.
if ($request->resource() == 'App\Nova\Station') {
$station = $request->findResourceOrFail();
return $query->where('area_id', $station->area_id);
}
return parent::relatableQuery($request, $query);
}
更新
方法 2 - 刚刚学到了一些新东西。
您可以在 Station
Nova 资源下为关系添加相关查询。在这种情况下无需检查资源。
public static function relatableManagers(NovaRequest $request, $query)
{
$station = $request->findResourceOrFail();
return $query->where('area_id', $station->area_id);
}
我认为方法 2 更好。