emilianotisato/nova-belongsto-depends

一个依赖于另一个 BelongsTo 关系的 Laravel Nova 字段。

0.1.4 2019-02-06 19:01 UTC

This package is auto-updated.

Last update: 2024-09-22 00:18:14 UTC


README

此包基于原始的 Orlyapps 包,我们不知道该包是否仍在维护。

安装

您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包

composer require emilianotisato/nova-belongsto-depends

在您的 Nova 资源中使用此字段

// Add the use statement a the top of your nova resource
use EmilianoTisato\NovaBelongsToDepends\NovaBelongsToDepends;

// ...

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),
        Text::make('Name')->rules('required', 'max:255'),

        NovaBelongsToDepends::make('Company')
            ->options(\App\Company::all()),
        NovaBelongsToDepends::make('Department')
            ->optionsResolve(function ($company) {
                // Reduce the amount of unnecessary data sent
                return $company->departments()->get(['id','name']);
            })
            ->dependsOn('Company'),
        NovaBelongsToDepends::make('Location')
            ->optionsResolve(function ($company) {
                // Reduce the amount of unnecessary data sent
                return $company->locations()->get(['id','name']);
            })
            ->dependsOn('Company'),

    ];
}

示例

  • 仓库具有多篇文章
  • 文章与供应商的多对多关系
  • 供应商与文章的多对多关系
  1. 选择一个 仓库 以获取该仓库的所有文章
  2. 选择一个 文章 以获取拥有此文章的所有供应商
public function fields(Request $request)
{
    return [
        ID::make()->sortable(),
        Text::make('Name')->rules('required', 'max:255'),

        NovaBelongsToDepends::make('Warehouse')
        ->options(\App\Warehouse::all())
        ->rules('required'),
        NovaBelongsToDepends::make('Article')
            ->optionsResolve(function ($warehouse) {
                return $warehouse->articles;
            })
            ->dependsOn('Warehouse')
            ->rules('required'),
        NovaBelongsToDepends::make('Supplier')
            ->optionsResolve(function ($article) {
                return \App\Supplier::whereHas('articles', function ($q) use ($article) {
                    $q->where('article_id', $article->id);
                })->get();
            })
            ->dependsOn('Article')
            ->rules('required'),


    ];
}

使用多个实例

有时您需要使用多个实例,或者您可能有同一 Eloquent 模型的第二个资源(例如:App\Nova\User 和 App\Nova\Provider 都代表 App\User 模型)。在这些情况下,为了避免冲突,您可以在元属性中声明特定的 Nova 资源(例如:->withMeta(['calledFromClass' => 'App\Nova\Provider'])

            NovaBelongsToDepends::make('Client')
                ->options(\App\Client::all()),

            NovaBelongsToDepends::make('Provider')
                ->withMeta(['calledFromClass' => 'App\Nova\Provider'])
                ->optionsResolve(function ($client) {
                    return $client->providers()->active()->get(['id', 'name']);
                })->dependsOn('Client')
                ->rules('required'),

致谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件