laravel笔记-Eloquent ORM(基础)
写在前面
时间可贵,善用目录↑
学习Laravel的笔记,仅仅是作为laravel文档笔记,目的是强化对文档的理解,质量不高。
什么是Eloquent ORM
M,就是其他框架里的模型~,用来和数据库交互,一般来讲每一个表对应一个模型。
这篇主要介绍简单的使用流程,为了跑通概念。
定义一个Eloquent ORM
使用Artisan 命令:
php artisan make:model Flight
运行完后我们会在app目录下看到我们创建的model。
表名
这里注意,我们并没有定义Flight对应的表明,默认规则是模型类名的复数作为与其对应的表名。Flight->flights。
当然,我们可以使用$table指定一个表来关联Eloquent。
主键
Eloquent默认每张表的主键名为id,你可以在模型类中定义一个$primaryKey属性来覆盖该约定。
时间戳
laravel默认自动管理created_at和updated_at(在创建表的时候需要创建列)。框架会自动填充相应列。
如果不想自动管理可以$timestamps = false
。
当然如果要自行更改该时间戳字段的格式可以$dateFormat
.
数据库连接
Eloquent默认使用默认的数据库连接,当然也可以自行传入一个定义好的连接
使用$connection = '你配置的连接名'
(config/database.php中配置)。
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model{
// 关联到模型的数据表
protected $table = 'flight';
//设置主键
protected $primaryKey = 'flight_id';
//关闭created_at和updated_at的自动管理
$timestamps = false;
}
如何使用Eloquent ORM
如果我们按之前的步骤创建了一个Eloquent,我们就可以使用它方便的对数据库进行操作。
使用all()或者get()查询时,返回值为Illuminate\Database\Eloquent\Collection的实例,所以我们可以查询Collection的源码来查看如何操作数据~
查询:
use App\Flight;
//比如说查询全部数据all()
$flights = App\Flight::all();
//循环输出结果
foreach ($flights as $flight) {
echo $flight->name;
}
//一个简单的带约束的查询
$flights = App\Flight::where('active', 1)
->orderBy('name', 'desc')
->take(10)
->get();
//比如说遍历操作
$flights = $flights->reject(function ($flight) {
return $flight->cancelled;
});
//也可以分组操作数据
App\Flight::chunk(200, function ($flights) {
foreach ($flights as $flight) {
//
}
});
//当我们需要逐条处理大量数据是可以使用cursor()
//游标,可以大幅度减少内存消耗
foreach (Flight::where('foo', 'bar')->cursor() as $flight) {
//
}
//我们也可以通过主键来获取
$flight = App\Flight::find(1);
//当需要抛出异常时~findOrFail
//会返回一个404响应
$model = App\Flight::findOrFail(1);
//或者获取匹配查询条件的第一个模型...
$flight = App\Flight::where('active', 1)->first();
//当需要抛出异常时~findOrFail
//同样会返回一个404响应
$model = App\Flight::where('legs', '>', 100)->f