Laravel Eloquent Eager Loading,即Laravel渴求式加载,是一种优化数据库查询的方法。在 Laravel Eloquent 中,使用 with() 方法进行 Eager Loading,可以一次性加载多个关联模型数据,可以通过点语法来指定嵌套的关联关系。
Laravel Eloquent Eager Loading 是一种优化数据库查询的方法,可以避免在一个循环中多次查询数据库而导致的性能问题。
当需要获取一个模型及其关联模型的数据时,如果使用常规的查询方法,每个关联模型都会独立执行一条数据库查询,从而导致数据库查询次数的增加和潜在的性能问题。而使用 Eager Loading,则可以预先加载关联数据,减少数据库查询次数,提高性能。
它的核心是Eager Loading,它告诉Eloquent你想要抓取一个具有特定关系的模型,这样框架就会产生一个更高效的查询来抓取你需要的所有数据。通过快速加载,您可以将许多查询减少到一个或两个。
现在,我们来看一个 Flight 模型的示例,我们将用它从 flights 数据库表中检索和存储数据信息:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
//
}
请注意,我们并没有告诉 Eloquent 我们的 Flight 模型使用哪个数据表。 除非明确地指定了其它名称,否则将使用类的复数形式「蛇形命名」来作为表名。因此,在这种情况下,Eloquent 将假设 Flight 模型存储的是 flights 数据表中的数据,而 AirTrafficController 模型会将记录存储在 air_traffic_controllers 表中。
你可以通过在模型上定义 table 属性来指定自定义数据表:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 与模型关联的表名
*
* @var string
*/
protected $table = 'my_flights';
}
Eloquent 也会假设每个数据表都有一个名为 id 的主键列。你可以定义一个受保护的 $primaryKey 属性来重写约定。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 与表关联的主键
*
* @var string
*/
protected $primaryKey = 'flight_id';
}
此外,Eloquent 假设主键是一个自增的整数值,这意味着默认情况下主键会自动转换为 int 类型。如果您希望使用非递增或非数字的主键则需要设置公共的 $incrementing 属性设置为 false:
<?php
class Flight extends Model
{
/**
* 主键是否主动递增
*
* @var bool
*/
public $incrementing = false;
}
如果你的主键不是一个整数,你需要将模型上受保护的 $keyType 属性设置为 string:
<?php
class Flight extends Model
{
/**
* 自动递增主键的「类型」
*
* @var string
*/
protected $keyType = 'string';
}
默认情况下,Eloquent 预期你的数据表中存在 created_at 和 updated_at 两个字段 。如果你不想让 Eloquent 自动管理这两个列, 请将模型中的 $timestamps 属性设置为 false:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 是否主动维护时间戳
*
* @var bool
*/
public $timestamps = false;
}
如果需要自定义时间戳的格式,在你的模型中设置 $dateFormat 属性。这个属性决定日期属性在数据库的存储方式,以及模型序列化为数组或者 JSON 的格式:
<?php
namespace App\Models;
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\Models;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* 模型的数据库连接名
*
* @var string
*/
protected $connection = 'connection-name';
}
延伸阅读1:Laravel 的 Eloquent ORM 是什么
Laravel 的 Eloquent ORM 提供了一个漂亮、简洁的 ActiveRecord 实现来和数据库交互。每个数据库表都有一个对应的「模型」用来与该表交互。你可以通过模型查询数据表中的数据,以及在数据表中插入新记录。
最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台:织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。