使用 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';
}
我有一个使用 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';
}