定制 tailflow/castable-dto 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

tailflow/castable-dto

最新稳定版本:2.1.0

Composer 安装命令:

composer require tailflow/castable-dto

包简介

Automatically cast JSON columns to PHP objects in Laravel using Spatie's data-transfer-object class

README 文档

README

Deprecated

Please consider using tailflow/dto instead.

Latest Version on Packagist Build Status on GitHub Actions

Have you ever wanted to cast your JSON columns to a value object?

This package gives you an extended version of Spatie's DataTransferObject class, called CastableDataTransferObject.

Under the hood it implements Laravel's Castable interface with a Laravel custom cast that handles serializing between the DataTransferObject (or a compatible array) and your JSON database column.

Installation

You can install the package via composer:

composer require tailflow/castable-dto

Usage

1. Create your CastableDataTransferObject

Check out the readme for Spatie's data transfer object package to find out more about what their DataTransferObject class can do.

namespace App\DataTansferObjects;

use Tailflow\DataTransferObjects\CastableDataTransferObject;

class Address extends CastableDataTransferObject
{
    public string $country;
    public string $city;
    public string $street;
}

2. Configure your Eloquent attribute to cast to it:

Note that this should be a jsonb or json column in your database schema.

namespace App\Models;

use App\DataTansferObjects\Address;
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $casts = [
        'address' => Address::class,
    ];
}

And that's it! You can now pass either an instance of your Address class, or even just an array with a compatible structure. It will automatically be cast between your class and JSON for storage and the data will be validated on the way in and out.

$user = User::create([
    // ...
    'address' => [
        'country' => 'Japan',
        'city' => 'Tokyo',
        'street' => '4-2-8 Shiba-koen',
    ],
]);

$residents = User::where('address->city', 'Tokyo')->get();

But the best part is that you can decorate your class with domain-specific methods to turn it into a powerful value object.

$user->address->toMapUrl();

$user->address->getCoordinates();

$user->address->getPostageCost($sender);

$user->address->calculateDistance($otherUser->address);

echo (string) $user->address;

Credits

License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 29.42k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 8
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 8
  • Watchers: 2
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-11-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固