biscofil / laravel-submodels
此包已被废弃,不再维护。未建议替代包。
创建 Laravel 子模型
v2.0.1
2019-10-15 06:52 UTC
Requires
- illuminate/database: ~5.6.0|~5.7.0|~5.8.0|^6.0.0
Requires (Dev)
- orchestra/testbench: 3.8.*
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2020-11-15 17:16:32 UTC
README
在 Laravel 中创建子模型
安装
通过 Composer
composer require biscofil/laravel-submodels
使用方法
>>> User::find(1) => App\AdminUser {#3182 id: 1, first_name: "something", last_name: "something" is_admin: true, admin_parameter: "something" >>> User::find(2) => App\User {#3164 id: 2, first_name: "something", last_name: "something", is_admin: false
为了实现此结果,每个需要扩展的模型都必须实现返回正确类的 getSubModelClass
方法,取决于条件。
class User extends Authenticatable{ use HasSubModels; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'first_name', 'last_name', 'is_admin' ]; /** * @param $model * @return string|null */ public function getSubModelClass($model){ $class = null; if ($model->isAdmin()) { $class = AdminUser::class; } elseif ($model->isCustomer()) { $class = CustomerUser::class; } return $class; } /** * @param $query * @return mixed */ public function scopeAdmins($query) { return $query->where('is_admin', '=', true); } }
另一方面,每个子模型可以添加包含可填充参数列表的 appendedFillable
私有属性。此列表将与父类的列表合并。对于 appendedCasts
数组也是如此。
class AdminUser extends User{ use HasAppendedFields; private $appendedFillable = [ 'admin_parameter', 'is_a_cool_admin' ]; private $appendedCasts = [ 'is_a_cool_admin' => 'bool' ]; public function newQuery() { return $this->scopeAdmins(parent::newQuery()); } }
鸣谢
许可证
许可证。请参阅许可证文件以获取更多信息。