Laravel5.7 Eloquent ORM快速入门详解(3)

Flight::chunk(200, function ($flights) {
 foreach ($flights as $flight) {
  //
 }
});

传递给该方法的第一个参数是你想要获取的“组块”数目,闭包作为第二个参数被传入用于处理每个从数据库获取的组块数据。

使用游标

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

foreach (Flight::where('foo', 'bar')->cursor() as $flight) {
 //
}

获取单个模型/聚合结果

当然,除了从给定表中获取所有记录之外,还可以使用 find 和 first 获取单个记录。这些方法返回单个模型实例而不是模型集合:

// 通过主键获取模型...
$flight = App\Flight::find(1);

// 获取匹配查询条件的第一个模型...
$flight = App\Flight::where('active', 1)->first();

还可以通过传递主键数组来调用 find 方法,这将会返回匹配记录集合:

$flights = App\Flight::find([1, 2, 3]);

Not Found 异常

有时候你可能想要在模型找不到的时候抛出异常,这在路由或控制器中非常有用,findOrFail 和 firstOrFail 方法会获取查询到的第一个结果。不过,如果没有任何查询结果,Illuminate\Database\Eloquent\ModelNotFoundException 异常将会被抛出:

$model = App\Flight::findOrFail(1);
$model = App\Flight::where('legs', '>', 100)->firstOrFail();

如果异常没有被捕获,那么 HTTP 404 响应将会被发送给用户,所以在使用这些方法的时候没有必要对返回 404 响应编写额外的检查:

Route::get('/api/flights/{id}', function ($id) {
 return App\Flight::findOrFail($id);
});

获取聚合结果

当然,你还可以使用查询构建器提供的聚合方法,例如 count、sum、max,以及其它查询构建器提供的聚合函数。这些方法返回计算后的结果而不是整个模型实例:

$count = App\Flight::where('active', 1)->count();
$max = App\Flight::where('active', 1)->max('price');

插入/更新模型

插入

想要在数据库中插入新的记录,只需创建一个新的模型实例,设置模型的属性,然后调用 save 方法:

<?php

namespace App\Http\Controllers;

use App\Flight;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FlightController extends Controller{
 /**
  * 创建一个新的航班实例
  *
  * @param Request $request
  * @return Response
  * @translator laravelacademy.org
  */
 public function store(Request $request)
 {
  // 验证请求...

  $flight = new Flight;

  $flight->name = $request->name;

  $flight->save();
 }
}


      

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5967.html