使用 lumen 为数据库中的所有表设置默认顺序

Setting default order for all the tables in a database using lumen

我有一个使用 lumen 编写的完整应用程序。申请完成。我只需要在应用程序中的每个查询中添加 order by 子句,这在某种程度上需要时间来添加。到处搜索后,我找到了以下方法。

protected static function boot() {
    parent::boot();
    static::addGlobalScope('order', function (Builder $builder) {
    $builder->orderBy('date', 'desc');
   });
}

我必须在每个模型中添加以上功能。这也是一个合理的解决方案,但我不想这样做。我想在一个地方添加这个功能,而不是像在任何服务提供商或某个地方那样在每个模型中添加 else.I 我对这个框架不太熟悉。如果有人知道其解决方案,请提供帮助。请注意,order by 的时间戳字段名称具有不同的前缀。例如。 tbl_created_at 是 table 命名列中的 Created_at 字段,prnt_created_at 字段是 table 命名打印中的 Created_at 字段。感谢您的帮助。

将其设为 trait,在特征中您仍然可以使用 class 中使用特征的方法和变量:

<?php
namespace App\Traits;

trait DefaultOrderByDate
{
    protected static function boot() {
        parent::boot();

        $field = parent::CREATED_AT;

        static::addGlobalScope('order', function (Builder $builder) use ($field) {
            $builder->orderBy($field, 'desc');
        });
    }
}

现在在您的模型中,您可以像这样使用它们:

<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Traits\DefaultOrderByDate;

class SomeModel extends Model
{
   use DefaultOrderByDate;

    /**
     * The name of the "created at" column.
     *
     * @var string
     */
    const CREATED_AT = 'prnt_created_at';

    /**
     * The name of the "updated at" column.
     *
     * @var string
     */
    const UPDATED_AT = 'prnt_updated_at';
}

此代码是此问题的无错解。

1: 在第一步创建特征

   <?php
     namespace App\Traits;
     use Illuminate\Database\Eloquent\Builder;
     trait DefaultOrderByDate
     {
        protected static function boot() {
        parent::boot();

        $field = self::CREATED_AT;

         static::addGlobalScope('order', function (Builder $builder) use ($field) {
            $builder->orderBy($field, 'desc');
         });
       }
    }

2:创建trait后创建模型

<?PHP
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Traits\DefaultOrderByDate;

class SomeModel extends Model
{
  use DefaultOrderByDate;

  /**
   * The name of the "created at" column.
   *
   * @var string
   */
  const CREATED_AT = 'prnt_created_at';

  /**
   * The name of the "updated at" column.
   *
   * @var string
   */
   const UPDATED_AT = 'prnt_updated_at';
}