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(); } }
内容版权声明:除非注明,否则皆为本站原创文章。