davidwesdijk / laravel-polymorphic-eav
将实体-属性-值模型与Laravel应用程序中的多态Eloquent关系集成。
1.0.6
2022-02-15 13:34 UTC
Requires
- php: ^7.1|^8.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- orchestra/testbench: ^4.0
- phpunit/phpunit: ^8.0|^9.0
README
将实体-属性-值模型与Laravel应用程序中的多态Eloquent关系集成。
安装
您可以通过composer安装此包
composer require davidwesdijk/laravel-polymorphic-eav
用法
准备您的模型
为了将实体-属性-值模型实现到Eloquent模型中,唯一需要采取的操作是添加HasEntityAttributeValues
特质。这就是使用此包带来的全部功能所需的所有操作。
use DavidWesdijk\LaravelPolymorphicEav\Traits\HasEntityAttributeValues; class Product extends Model { use HasEntityAttributeValues; // Implementation of your Eloquent model }
分配属性
属性,当添加了特质时,可以通过Eloquent模型上的props
访问器进行访问和分配。只需设置其值!
class ProductController extends Controller { public function update(AnyValidatedRequest $request, Product $product) { $product->props->details->color = $request->color; // E.g. 'red' // That's it! } }
访问属性
分配的属性可以通过在props
访问器中定义组和属性来简单地访问,如下例所示。其概念是所有必需的属性都必须可访问,不抛出异常,以保持您的代码干净、可读和维护。
// This attribute has been set before $product->props->details->color; // 'red' // This attribute has never been set before $product->props->details->sku; // null // Even if the group has never been defined $product->props->foo->bar; // null
其他功能
如果您想删除一个属性,您可以将它的值设置为null,或者您可以简单地取消设置值。数据库条目将被删除。
unset($product->props->details->color); $product->props->details->color; // null
序列化
您可能会遇到需要在数组或JSON中具有所有分配属性的情况。此包尊重Arrayable
和Jsonable
接口。
$product->props->details->toArray(); ['color' => 'red'] $product->props->details->toJson(); '{color: "red"}'
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志。
贡献
有关详细信息,请参阅贡献。
安全
如果您发现任何安全相关的问题,请通过电子邮件david@favor.media报告,而不是使用问题跟踪器。
鸣谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。