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\BuilderIlluminate\Database\Eloquent\Builder 的实例。

orderBySub($query, $direction = 'asc', $nullPosition = null)

  • $query 必须是 Illuminate\Database\Query\BuilderIlluminate\Database\Eloquent\Builder 的实例。
  • $direction 必须是 'asc''desc'
  • $nullPosition 必须是 null'first''last'

orderBySubAsc($query, $nullPosition = null)

  • $query 必须是 Illuminate\Database\Query\BuilderIlluminate\Database\Eloquent\Builder 的实例。
  • $nullPosition 必须是 null'first''last'

orderBySubDesc($query, $nullPosition = null)

  • $query 必须是 Illuminate\Database\Query\BuilderIlluminate\Database\Eloquent\Builder 的实例。
  • $nullPosition 必须是 null'first''last'

注意:空值位置(NULLS FIRSTNULLS 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();