yonchando / laravel-cast-attributes
Laravel模型将JSON列转换为类对象
v1.0.0
2024-06-08 17:27 UTC
Requires
- php: ^8.0
- illuminate/container: ^8.12|^9.0|^10.0|^11.0
- illuminate/contracts: ^8.12|^9.0|^10.0|^11.0
- illuminate/database: ^8.12|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
- laravel/framework: ^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.16
- orchestra/testbench: ~7
- phpunit/phpunit: ~9.0
README
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. 请参阅许可文件以获取更多信息。