yonchando/laravel-cast-attributes

Laravel模型将JSON列转换为类对象

v1.0.0 2024-06-08 17:27 UTC

This package is auto-updated.

Last update: 2024-09-22 03:07:19 UTC


README

Latest Version on Packagist Total Downloads

Laravel将属性转换为模型的自定义JSON列到类实体

安装

通过Composer

composer require yonchando/laravel-cast-attributes

用法

模型

class User extends \Illuminate\Database\Eloquent\Model
{
    protected $fillable = ['json'];

    protected $casts = [
        'json' => UserJson::class
    ];
}

UserJson

私有属性必须有以set开头的setter方法

class UserJson extends \Yonchando\CastAttributes\CastAttributes
{
    private string $firstName;
    
    protected string $lastName;
    
    public string $gender;
    
    public Image $image;
    
    public  function getFirstName(): string
    {
        return $this->firstName;
    }
    
    public  function setFirstName(string $firstName):void 
    {
        $this->firstName = $firstName;
    }
    
    public function getLastName(){
        return $this->lastName;
    }
}

图片

对于子属性类,使用特质CastProperty

class Image
{
    use \Yonchando\CastAttributes\Traits\CastProperty;
    
    public string $filename;
    public int $size;
    public string $path;
    
    public function url()
    {
        return Storage::url($this->path);
    }
}

控制器

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function show($id)
    {
        $user = User::find($id);
        
        $user->json->getFirstName();
        $user->json->getLastName();
        $user->json->gender;
        
        // access function in image class
        $user->json->image->url();
        
        // to array
        $user->json->toArray();
        $user->json->image->toArray();
        
    }
    
    public function store(Request $request)
    {
        // use class
        $user = new User([
            'json' => UserJson::create($request->all()),
        ]);
        
        // use an array
        $user = User::create([
            'json' => [
                'first_name' => $request->get('first_name'),        
                'last_name' => $request->get('last_name'),
                'gender' => $request->get('gender'),
                'image' => $request->get('image'),
            ]
        ])
    }
}

可用于CastProperty特质的函数

变更日志

请参阅变更日志以了解最近的更改。

贡献

请参阅contributing.md以了解详细信息和一个待办事项列表。

安全

如果您发现任何与安全相关的问题,请通过电子邮件von.chando@gmail.com联系,而不是使用问题跟踪器。

鸣谢

许可

MIT. 请参阅许可文件以获取更多信息。