dominikstyp/laravel-model-abstractor

在app/models目录中创建AbstractModel,修改make:model命令以生成继承自AbstractModel的模型,并提供了php artisan命令来将现有模型移动到app/models目录并更改其继承为AbstractModel。因此,所有模型都将继承自您自定义的类。

1.0.0 2017-11-14 02:56 UTC

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");