dominikstyp / laravel-model-abstractor
在app/models目录中创建AbstractModel,修改make:model命令以生成继承自AbstractModel的模型,并提供了php artisan命令来将现有模型移动到app/models目录并更改其继承为AbstractModel。因此,所有模型都将继承自您自定义的类。
Requires
- php: ~7.0
- laravel/laravel: >=5.3
This package is not auto-updated.
Last update: 2024-09-29 04:20:21 UTC
README
在app/models目录中创建AbstractModel,修改make:model命令以生成继承自AbstractModel的模型,并提供了php artisan命令来将现有模型移动到app/models目录并更改其继承为AbstractModel。因此,所有模型都将继承自您的自定义类。
安装
composer require "dominikstyp/laravel-model-abstractor @dev" -vvv
php artisan vendor:publish --provider='\\DominikStyp\\LaravelModelAbstractor\\LaravelModelAbstractorServiceProvider'
Laravel >= 5.5
由于Laravel 5.5中引入了包发现功能,您不再需要将服务提供者添加到您的提供者中。
Laravel < 5.5
对于Laravel小于5.5的情况,您必须将服务提供者添加到您的config/app.php文件中,如下所示
'providers' => [ // ... DominikStyp\LaravelModelAbstractor\LaravelModelAbstractorServiceProvider::class, // ... ],
使用方法
Laravel Model Abstractor提供新的控制台任务
laravel-model-abstractor:list-models 列出所有继承自 Eloquent\Model 的模型
laravel-model-abstractor:change-models-inheritance 将默认模型继承改为 AbstractModel,
并将命名空间更改为 App\Models,然后将它们移动到 app\Models 目录。
警告!这不会影响 User 模型,因为它继承自 Authenticatable,因此您必须手动更改它,
以及 config/auth.php - providers部分。
示例
假设您有一个模型文件 app/Dummy1.php,其中包含以下代码
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Dummy1 extends Model { // }
该模型是自动由 php artisan make:model Dummy1 命令生成的。
但您希望您的模型(以及其他模型)像这样继承自您的 AbstractModel 类
<?php namespace App\Models; class Dummy1 extends AbstractModel { // }
您的 AbstractModel 看起来像这样
<?php namespace App\Models; /** * AbstractModel * */ abstract class AbstractModel extends \Illuminate\Database\Eloquent\Model { /** your custom code **/ }
您需要做的就是调用 php artisan laravel-model-abstractor:change-models-inheritance,然后您就完成了。
附加功能
如果您查看 Models/Traits 目录,您会找到一个名为 LocalScopes.php 的特质,该特质附加到 AbstractModel 上。 LocalScopes 为所有继承自 AbstractModel 的模型提供以下功能(请参阅下面的示例)
DummyModel1::where("something",1)->newest(); DummyModel1::where("something",2)->oldest(); // these are equivalent of DummyModel1::where("something",1)->orderBy("id","desc"); DummyModel1::where("something",2)->orderBy("id","asc");