ensinio / nova-inline-relationship
一个用于在 Laravel Nova 中显示关系属性的 Laravel Nova 字段。
Requires
- php: >=7.1.0
Requires (Dev)
- codedungeon/phpunit-result-printer: ^0.26.2
- laravel/nova: *
- mockery/mockery: ^1.1
- orchestra/testing: ^4.0
- phpunit/phpunit: ^8.3
- dev-master
- 0.3.0
- 0.2.0
- v0.1.0
- dev-dependabot/npm_and_yarn/url-parse-1.5.10
- dev-dependabot/npm_and_yarn/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/ws-6.2.2
- dev-dependabot/npm_and_yarn/dns-packet-1.3.4
- dev-dependabot/npm_and_yarn/hosted-git-info-2.8.9
- dev-dependabot/npm_and_yarn/lodash-4.17.21
- dev-dependabot/npm_and_yarn/y18n-3.2.2
- dev-dependabot/npm_and_yarn/elliptic-6.5.4
- dev-dependabot/npm_and_yarn/ini-1.3.7
- dev-dependabot/npm_and_yarn/http-proxy-1.18.1
- dev-dependabot/npm_and_yarn/node-sass-4.14.1
- dev-dependabot/npm_and_yarn/websocket-extensions-0.1.4
This package is auto-updated.
Last update: 2024-09-07 23:41:36 UTC
README
请注意,这是一个实验性项目,我们的团队目前没有积极维护和支持。如果您有兴趣帮助维护/扩展此项目,请与我们联系。
背景:我们最初于 2019 年开始此项目,旨在为 Laravel Nova 添加内联关系功能。除了遇到一些重大复杂性,阻碍我们高效推进之外,Laravel Nova 已经添加了功能,覆盖了我们试图实现的大部分内容,但并非全部。我们建议在这种情况下使用 Laravel Nova 的核心功能,而不是此包。
Nova Inline Relationship
Nova Inline Relationship 允许您直接从父对象的创建/编辑界面管理(添加/编辑/更新/删除/重新排序)对象的关联。通过将关联作为内联属性展示,您可以向内容编辑者提供一种简化和高效的复杂数据处理工作流程。
要求
此 Nova 字段需要 Nova 2.0 或更高版本。
安装
您可以通过 composer 在使用 Nova 的 Laravel 应用中安装此包
composer require kirschbaum-development/nova-inline-relationship
用法
要在您的模型资源中使用 NovaInlineRelationship
,您只需将内联方法添加到相关模型资源字段的常规语法中。
假设一个 BlogPost
模型与 Image
模型有一个一对多关系,您的 BlogPost
资源将如下所示
namespace App\Nova; use Laravel\Nova\Fields\Image; class BlogPost extends Resource { //... public function fields(Request $request) { return [ //... HasMany::make('Images', 'images', Image::class)->inline(), ]; } }
注意:您需要为 Image
添加一个 Nova 资源 - 所有字段和规则都将从指定的资源中检索。您必须将资源指定为关系字段的第三个参数,如上图所示。
添加相关模型
设置完成后,您可以在创建新基础模型时直接添加新的相关模型。您可以使用“添加新 Image”按钮将新的 Image
添加到 BlogPost
查看相关模型
相关模型现在也将以内联方式显示
更新相关模型
您还可以更新、重新排列(对于一对多关系)和删除相关模型
您可以使用 sortUsing()
方法添加拖放功能,以通过更新相关模型来更新它们的顺序。在以下代码示例中,我们使用名为 order
的字段来存储 Images
模型的排序顺序
HasMany::make('Images')->inline()->sortUsing('order'),
必需的关联
有时您可能在创建模型时需要强制子关联。为此,只需使用 requireChild()
方法。例如,您可能想创建一个新的用户,并强制为该用户创建一个新的配置文件。
HasOne::make('Profile', 'profile', Profile::class)->inline()->requireChild(),
第三方包支持
我们提供了一种简单的方法来处理第三方包有时不与 Nova Inline Relationships 一起工作的问题。这些包有时在返回它们字段的子集方面略有不同。我们有方法轻松集成这些包的功能。这可能不适用于所有情况,但应该允许大多数第三方包。
您必须使用以下命令发布此包的配置
php artisan vendor:publish
这将发布一个配置文件为 config/nova-inline-relationships.php
。在 third-party
数组中添加您自定义的命名空间路径。例如
'third-party' => [ 'App\Nova\ThirdPartyIntegrations', 'KirschbaumDevelopment\NovaInlineRelationship\Integrations', ]
在该命名空间中创建一个新类,如下所示
<?php namespace App\Nova\ThirdPartyIntegrations; use KirschbaumDevelopment\NovaInlineRelationship\Integrations\ThirdParty; use KirschbaumDevelopment\NovaInlineRelationship\Integrations\Contracts\ThirdPartyContract; class SomeThirdPartyField extends ThirdParty implements ThirdPartyContract { /** * Fields array from object. * * @return array */ public function fields(): array { // The following is just an example and should be updated to meet your needs. return $this->field->customFieldArray; } }
类的名称非常重要。它应该与在Nova资源内部使用的字段名称相同。如果字段类是CustomField
,则第三方集成类也应命名为CustomField
。
fields()
方法应返回所有自定义字段或包的字段数组的数组。
如果您认为您创建的第三方集成应包含在此包中,请创建一个pull请求,我们将对其进行审查!
支持的关系
目前支持以下Eloquent关系:
- BelongsTo
- HasOne
- HasMany
- MorphOne
- MorphMany
支持的字段
以下原生Nova 2.0字段已被确认可以正常工作。
- 布尔值
- 代码
- 国家
- 货币
- 日期
- 日期时间
- Markdown
- 数字
- 密码
- 地点
- 选择
- 文本
- 文本区域
- 时区
- Trix
- 头像
- 图片
- 文件
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献指南。
安全性
如果您发现任何安全问题,请通过电子邮件navneet@kirschbaumdevelopment.com或nathan@kirschbaumdevelopment.com联系,而不是使用问题跟踪器。
赞助
此包的开发由Kirschbaum Development Group赞助,这是一家以解决问题、团队建设和社区为中心的开发者驱动型公司。了解更多关于我们或加入我们!
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。