reinink / advanced-eloquent
Laravel 的高级 Eloquent 宏集合
v0.2.0
2018-11-23 20:30 UTC
This package is auto-updated.
Last update: 2024-09-07 09:18:39 UTC
README
Laravel 的高级 Eloquent 宏集合。
⚠️ 注意,我已经将此包提供的大部分功能集成到了 Laravel 核心中,特别是子查询功能,这使得此包变得过时。如果您想了解更多关于这些功能的信息,请务必查看我的 Eloquent 性能模式 课程,该课程详细介绍了这些技术以及其他技术。
安装
您可以通过 Composer 安装此包
composer require reinink/advanced-eloquent
此包使用自动发现,因此不需要进一步配置。
API
addSubSelect($column, $query)
$column
必须是字符串。$query
必须是Illuminate\Database\Query\Builder
或Illuminate\Database\Eloquent\Builder
的实例。
orderBySub($query, $direction = 'asc', $nullPosition = null)
$query
必须是Illuminate\Database\Query\Builder
或Illuminate\Database\Eloquent\Builder
的实例。$direction
必须是'asc'
或'desc'
。$nullPosition
必须是null
、'first'
或'last'
。
orderBySubAsc($query, $nullPosition = null)
$query
必须是Illuminate\Database\Query\Builder
或Illuminate\Database\Eloquent\Builder
的实例。$nullPosition
必须是null
、'first'
或'last'
。
orderBySubDesc($query, $nullPosition = null)
$query
必须是Illuminate\Database\Query\Builder
或Illuminate\Database\Eloquent\Builder
的实例。$nullPosition
必须是null
、'first'
或'last'
。
注意:空值位置(NULLS FIRST
和 NULLS LAST
)不是所有数据库都支持(例如 MySQL 和 SQLite),但是 PostgreSQL 和其他数据库支持。
示例
使用子查询获取用户的最后登录日期
$users = User::addSubSelect('last_login_at', Login::select('created_at') ->whereColumn('user_id', 'users.id') ->latest() )->get();
与上面的例子相同,但是使用查询构建器
$users = DB::table('users')->addSubSelect('last_login_at', DB::table('logins') ->select('created_at') ->whereColumn('user_id', 'users.id') ->latest() )->get()
使用子查询按公司名称排序用户
$users = User::orderBySub(Company::select('name')->whereColumn('company_id', 'companies.id'))->get();
按最后登录日期排序用户,空值放在最后
$users = User::addSubSelect('last_login_at', Login::select('created_at') ->whereColumn('user_id', 'users.id') ->latest() )->orderBySubDesc(Login::select('created_at') ->whereColumn('user_id', 'users.id') ->latest(), 'last' )->get();