Laravel Eloquent ORM理解以及常用方法返回值

文章作者:最后的阿莫西林

发布时间:2022-06-11 21:15

ORM是什么?

ORM,即 Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样的模式在我们操作具体的业务对象时,不需要去和简单繁琐的SQL语句打交道,只需操作对象的属性和方法即可。

ORM 常见的实现方式是 ActiveRecord 和 DataMapper。ActiveRecord(非常流行) 中模型与数据表一一对应,DataMapper 中模型与数据表是完全分离的。laravel采用的 ActiveRecord形式,名字叫Eloquent。

简单展示一下这种模式:

  1. 类名 <-对应-> 表名   
  2. 属性 <-对应->字段
  3. 属性的约束 <-对应->字段的类型
  4. 实例对象 <-对应-> 表记录

每一个 Eloquent 「模型」对应着数据库中的一张表,例如你有一个Student类,那么数据库表student与之对应,我们通过调用模型的相应方法实现对数据库的增删改查,例如Student::create(),Student::delete(),Student::update(),Student::save(),就不用再去写SQL语句了,方法已经内置了。

举个代码例子:

$student = Student::where('name', '老六')->first(); //查询学生表中叫老六的学生,返回一个Student类的实例对象
$echo student->classname //输出 这个学生的班级名,classname就是模型属性,对应数据表里面的classname字段
$student->classname="7班";
$student->save();修改班级名并保存,这里就是调用模型的方法

是不是很方便^_^

laravel Eloquent 常用方法返回值

  • create()成功返回bool值,失败抛出错误
  • insert()成功返回bool值,失败抛出错误
  • save()成功返回bool值,失败抛出错误
  • delete()成功返回影响行数,失败返回false
  • update()成功返回影响行数,失败抛出错误
  • increment()成功返回更新记录数,失败抛出错误
  • first()查到数据返回Eloquent 对象实例,查不到返回null
  • find()查到数据返回Eloquent 对象实例,查不到返回null
  • get()查到数据返回Eloquent 集合,没有数据返回空集合
  • all()查到数据返回Eloquent 集合,没有数据返回空集合

larave Illuminate\Database\Support\Collection 结果集

像上面的get()和all()返回的是一个Illuminate\Database\Support\Collection 结果集,其中每个结果都是一个 PHP stdClass 对象的实例,你可以通过访问列中对象的属性访问每个列的值。

我们先来了解stdClass,stdClass类是一个没有成员变量也没有成员方法的类。 它的所有的魔术方法,父类、接口等在初始化时都被设置成NULL,特点就是可以动态的添加成员属性,例如:

<?php
$student = array(
    "student_id" => "666", 
    "name" => "老六", 
    "age" => "20", 
    "college" => "计算机科学"
); //定义一个数组存储学员信息

//stdClass动态添加成员属性
$student=new stdClass();
$student->student_id="666";
$student->name="老六";
$student->age=20;
$student->college="计算机科学";
?>

当有多条数据取出来的时候,也即有多个stdClass的时候,我们怎么来展现或包裹呢?就是Collection,集合的意思。举例:查询分类下的所有分类名。

laravel all()方法返回值
laravel collection

因为是取出多条数据,所以返回的是一个Collection集合,里面包含一个items[]数组,在这个数组里面,装的就是每一个stdClass对象,也就是具体的每一个Category对象。

这个时候不能直接调用类的属性,$cage->name这样相当于是调用的Collection->name,会报错,因为Collection没有name这个属性。Eloquent Relationship(关系)的调用需要具体的对象模型,就像上面介绍laravel ORM时说过每一个 Eloquent 「模型」对应着数据库中的一张表,他是具体的,所以Collection需要先遍历再调用模型属性。

foreach($cate as $cateItem){
  $echo $cateItem->name;
}

更多的Eloquent知识可以访问laravel官网学习。

如果这篇文章对你有帮助,那真是开心极了~