Laravel5.7 Eloquent ORM快速入门详解(2)
如果你需要自定义时间戳格式,设置模型中的 $dateFormat 属性。该属性决定日期被如何存储到数据库中,以及模型被序列化为数组或 JSON 时日期的格式:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * 模型日期列的存储格式 * * @var string */ protected $dateFormat = 'U'; }
如果你需要自定义用于存储时间戳的字段名称,可以在模型中设置 CREATED_AT 和 UPDATED_AT 常量:
<?php class Flight extends Model { const CREATED_AT = 'creation_date'; const UPDATED_AT = 'last_update'; }
数据库连接
默认情况下,所有的 Eloquent 模型使用应用配置中的默认数据库连接,如果你想要为模型指定不同的连接,可以通过 $connection 属性来设置:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The connection name for the model. * * @var string */ protected $connection = 'connection-name'; }
获取模型
创建完模型及其关联的数据表后,就可以从数据库中获取数据了。将 Eloquent 模型看作功能强大的查询构建器,你可以使用它来流畅的查询与其关联的数据表。例如:
<?php use App\Flight; $flights = App\Flight::all(); foreach ($flights as $flight) { echo $flight->name; }
添加额外约束
Eloquent 的 all 方法返回模型表的所有结果,由于每一个 Eloquent 模型都是一个查询构建器,你还可以添加约束条件到查询,然后使用 get 方法获取对应结果:
$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get();
注:由于 Eloquent 模型本质上就是查询构建器,你可以在 Eloquent 查询中使用查询构建器的所有方法。
集合
对 Eloquent 中获取多个结果的方法(比如 all 和 get)而言,其返回值是 Illuminate\Database\Eloquent\Collection 的一个实例,Collection 类提供了多个有用的函数来处理 Eloquent 结果集:
$flights = $flights->reject(function ($flight) { return $flight->cancelled; });
当然,你也可以像数组一样循环遍历该集合:
foreach ($flights as $flight) { echo $flight->name; }
组块结果集
如果你需要处理数据量很大的 Eloquent 结果集,可以使用 chunk 方法。chunk 方法会获取一个指定数量的 Eloquent 模型“组块”,并将其填充到给定闭包进行处理。使用 chunk 方法在处理大量数据集合时能够有效减少内存消耗: