Laravel - MySQL数据库的使用详解5(Eloquent ORM用法2:基本查询、动态范围)

作者: hgphp 发布时间: 2019-09-13 浏览: 608 次 编辑

七、获取模型数据

1,获取所有数据

我们使用 all() 方法可以把全部记录取出来,也就是自动把对应的模型对象集合全部取出来。

$users = User::all();
 
//foreach ($users as $user) {
//    echo $user->username;
//}

原文:Laravel - MySQL数据库的使用详解5(Eloquent ORM用法2:基本查询、动态范围)


2,根据主键查询数据

(1)使用 find() 方法可以根据主键取出一条数据。

$user = User::find(2);


原文:Laravel - MySQL数据库的使用详解5(Eloquent ORM用法2:基本查询、动态范围)

(2)find() 方法还可以用于查询多条记录,传入一个数组即可:

$users = User::find([1,2,3]);

3,获取结果集的第一条数据

使用 find() 方法可以从结果集中取第一个记录:

$user = User::all()->first();


4,添加约束条件查询数据

(1)由于每一个 Eloquent 模型都是一个查询构建器,我们还可以添加约束条件到查询,然后使用 get 方法获取对应结果。

关于更多约束条件的介绍和用法,可以查看我之前写的文章:

(2)如果没法使用 Eloquent 提供的约束接口产生出查询语句,也可以使用 whereRaw 方法来编写原生的 sql 语句:

$users = User::whereRaw('id > ? and username like \'%hang%\'', [0])
              ->get();


5,切片化处理结果(chunk)

(1)如果我们需要处理数据量很大的 Eloquent 结果集,可以使用 chunk 方法。chunk 方法会获取一个指定数量的 Eloquent 模型“组块”,并将其填充到给定闭包进行处理,从而有效减少内存消耗。

(2)chunk 方法第一个参数表示每次“拆分”要取出的数据数量。第二个参数的闭合函数会在每次取出数据时被调用。

// 每次查询200条
User::chunk(200, function ($users) {
    foreach ($users as $user) {
        //
    }
});


6,使用游标

cursor 方法允许我们使用游标迭代处理数据库记录,一次只执行单个查询。在处理大批量数据时,cursor 方法可大幅减少内存消耗。

foreach (User::where('id', '>', 0)->cursor() as $user) {
    echo $user;
}


7,获取聚合结果

我们可以使用查询构建器提供的聚合方法( countsumminmaxavg 等),以及其它查询构建器提供的聚合函数。这些方法返回计算后的结果而不是整个模型实例。

$count = User::where('id', '>', 1)->count();
$max = User::where('id', '>', 1)->max('age');


八、范围查询(Query Scopes)

1,基本用法

(1)范围查询可以让我们轻松的重复利用模型的查询逻辑。要设定范围查询,只要定义有 scope 前缀的模型方法:

<?php
 namespace App\Models;
 use Illuminate\Database\Eloquent\Model;
 class User extends Model {
   // 只查询老年用户
  public function scopeOld($query)
  {
    return $query->where('age', '>=', 60);
  }
     // 只查询女性用户
  public function scopeWomen($query)
  {
    return $query->where('sex', 0);
  }
}


(2)下面是使用范围查询的使用(调用时不需要加上 scope 前缀)。注意:范围查询同样支持链式调用。

$users1 = User::women()->get();
 $users2 = User::women()->old()->orderBy('id', 'desc')->get();


2,动态范围查询

(1)有时我们可能想要定义可接受参数的范围查询方法,只要把参数加到方法里:

<?php
 namespace App\Models;
 use Illuminate\Database\Eloquent\Model;
 class User extends Model {
     public function scopeOfAge($query, $age)
  {
    return $query->whereAge($age);
  }
}

(2)使用时把参数值传到范围查询方法调用里即可:

$users = User::ofAge(88)->get();


原文链接:https://www.hangge.com/blog/cache/detail_2385.html


Laravel - MySQL数据库的使用详解系列:

1,Laravel - MySQL数据库的使用详解1(安装配置、基本用法)4,Laravel - MySQL数据库的使用详解4(Eloquent ORM用法1:创建模型)7,Laravel - MySQL数据库的使用详解7(Eloquent ORM用法4:插入、更新数据)
2,Laravel - MySQL数据库的使用详解2(Query Builder用法1:查询操作)5,Laravel - MySQL数据库的使用详解5(Eloquent ORM用法2:基本查询、动态范围)8,Laravel - MySQL数据库的使用详解8(Eloquent ORM用法5:删除数据)
3,Laravel - MySQL数据库的使用详解3(Query Builder用法2:新增、修改、删除)6,Laravel - MySQL数据库的使用详解6(Eloquent ORM用法3:模型关联、关联查询9,Laravel - MySQL数据库的使用详解9(Eloquent ORM用法6:事件、订阅、观察者)