在laravel上使用get和first时,模型和查询生成器方法之间的区别?

时间:2018-08-27 17:14:44

标签: laravel collections model laravel-query-builder

如果我只想获得一个列名

-使用模型--------

$model_use_get  =Model::select('name')->where('id','=',10)->get();

$want=$model_use_get[0]['name'];

$model_use_first=Model::select('name')->where('id','=',10)->first();

$want=$model_use_first['name'];

---使用查询生成器-----

$query_use_get  =DB::table('a1)->select('name')->where('id','=',10)->get();

$want=$query_use_get[0]->name;

$query_use_first=DB::table('a1)->select('name')->where('id','=',10)->first();

$want=$query_use_first->name;

有什么区别?建模或查询方法都不能构成集合吗?还是对象?(数组?)我很困惑!!! 是否有任何直接的方法只需选择一个,而无需再次处理? 如下所示(我确认结果只是一个,因为我使用的是id = xxx)

$want=model::select('name)->.... 
$want=DB::table('a1')->select('name').....

2 个答案:

答案 0 :(得分:3)

区别很简单:

  • first()从数据库中获取一条记录
  • get()获取项目集合(类似于数组)

因此,对于first(),您可以使用$model->property获得模型属性,但是对于get,您可以拥有多个项目,因此可以使用循环获取属性:

foreach ($models as $model) {
   $model->property;
}

当您像这样运行get()之后运行first时,您将运行2个查询,但是您也可以对已经从数据库中获得的项目调用first

$models = Model::select('name')->where('id','=',10)->get();

foreach ($models as $model) {
   echo $model->name;
}

$firstModel = $models->first();

$want = $firstModel->name;

答案 1 :(得分:2)

要回答这个问题,ModelDB::table()->get()->first()的组合都会返回不同的结果。

第一个实例Model->get()

$collection = Model::get(); 
// Returns a `Collection` of `Model` records, constrained to your additional query logic.

第二,Model->first()

$model = Model::first(); 
// Returns a single `Model`, or `null`, based on your query logic.

第三,DB::table()->get()

$collection = DB::table("table")->get(); 
// Returns a `Collection` of `stdClass` objects, based on your query logic.

第4个,DB::table()->first()

$record = DB::table("table")->first(); 
// Returns a single `stdClass`, or `null`, based on your query logic.

希望这样可以清除所有内容。还有其他闭包,例如find()findOrFail()paginate()等,它们都返回相似的内容,因此请使用它们,并查看最适合您需要的内容。