📅  最后修改于: 2023-12-03 14:43:46.855000             🧑  作者: Mango
作为一款流行的 PHP 框架,Laravel 内置了自己的 ORM - Eloquent ORM,使得与关系型数据库(MySQL,PostgreSQL 等)进行交互变得容易。
关系数据库的表在 Laravel 中可以通过定义 Eloquent 模型来表示。首先要创建一个和表对应的 Eloquent 模型后,在相应的模型文件中指定与数据库表关联的信息(表名、主键、时间戳等)。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* 关联的数据表名
*
* @var string
*/
protected $table = 'users';
/**
* 主键名
*
* @var string
*/
protected $primaryKey = 'id';
/**
* 是否启用时间戳
*
* @var bool
*/
public $timestamps = true;
// ...
}
在定义模型时,Laravel 提供了多种方法来定义不同的关系映射。以下是其中一些类型的示例:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// ...
/**
* 获取与用户关联的电话记录。
*/
public function phone()
{
return $this->hasOne('App\Phone');
}
}
class Phone extends Model
{
/**
* 获取分配给电话的用户。
*/
public function user()
{
return $this->belongsTo('App\User');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// ...
/**
* 获取帖子的评论。
*/
public function comments()
{
return $this->hasMany('App\Comment');
}
}
class Comment extends Model
{
/**
* 获取发表此评论的用户。
*/
public function user()
{
return $this->belongsTo('App\User');
}
/**
* 获取此评论所属的帖子。
*/
public function post()
{
return $this->belongsTo('App\Post');
}
}
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
// ...
/**
* 获取拥有此角色的所有用户。
*/
public function users()
{
return $this->belongsToMany('App\User');
}
}
class User extends Model
{
/**
* 获取分配给此用户的所有角色。
*/
public function roles()
{
return $this->belongsToMany('App\Role');
}
}
查询构建器是 Eloquent 模型的核心。可以使用链式方法来定义多个查询条件,并获取查询结果。以下是一个简单的示例:
// 查找状态为 active 的所有用户
$users = App\User::where('status', 'active')->get();
除了 where 方法,Laravel 的查询构建器还提供了更多的条件链式方法,如 orWhere、whereIn、whereBetween 等等。
有时可以将关系属性定义为延迟加载,以避免在加载模型时过多的查询。这可以通过在关系属性前加上 lazy:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// ...
/**
* 定义延迟加载关系
*/
public function roles()
{
return $this->belongsToMany('App\Role')->lazy();
}
}
延迟关系可以在访问时加载:
// 读取用户角色时再加载
$user->load('roles');
Laravel 的 Eloquent ORM 提供了方便的方式来与关系型数据库进行交互。借助模型定义与关系映射,程序员可以轻松地进行常用的 CRUD 操作。查询构建器提供适用于各种情况的灵活、强大的查询方法,简化了对复杂数据的查询处理。延迟加载关系可优化高负载场景下的访问性能。