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