使用 lumen 为数据库中的所有表设置默认顺序
Posted
技术标签:
【中文标题】使用 lumen 为数据库中的所有表设置默认顺序【英文标题】:Setting default order for all the tables in a database using lumen 【发布时间】:2021-07-08 16:32:53 【问题描述】:我有一个使用 lumen 编写的完整应用程序。申请完成。我只需要为应用程序中的每个查询添加 order by 子句,这在某种程度上需要添加时间。到处搜索后,我找到了以下方法。
protected static function boot()
parent::boot();
static::addGlobalScope('order', function (Builder $builder)
$builder->orderBy('date', 'desc');
);
我必须在每个模型中添加上述功能。这也是一个合理的解决方案,但我不想这样做。我想在一个地方添加这个功能,而不是像在任何服务提供商或其他地方那样添加每个模型。我对这个框架不太熟悉。如果有人知道其解决方案,请提供帮助。请注意,order by 的时间戳字段名称具有不同的前缀。例如。 tbl_created_at 是名为 column 的表中的 Created_at 字段,而 prnt_created_at 字段是名为 prints 的表中的 Created_at 字段。感谢您的帮助。
【问题讨论】:
【参考方案1】:此代码是此问题的无错误解决方案。
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';
【讨论】:
【参考方案2】:将其设为trait
,在 trait 中您仍然可以使用正在使用该 trait 的类中的方法和变量:
<?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';
【讨论】:
谢谢,但您没有阅读完整的问题。对于模型中定义的每个表,字段名称“Created_at”将不同。 Created_at="tbl_created_at" 抱歉,再次更正了我的答案...parent
是包含特征的类,未经测试,但我希望这应该可以帮助您入门。
你能分享一个更改时间戳的示例模型吗?你能分享你遇到的任何错误吗?
非常感谢这段代码在解决了一些问题后对我有用。以上是关于使用 lumen 为数据库中的所有表设置默认顺序的主要内容,如果未能解决你的问题,请参考以下文章
当 `OrdinalBase` 字段设置为 1 时,`kernel32.dll` 如何导出 0 的序数?