在laravel上使用get和first时,模型和查询生成器方法之间的区别是什么?
如果我只想得到一个列名 --使用模型-------- ---使用查询生成器----- 有什么区别?模型或查询方法不都是集合吗?还是对象?(数组?)我搞糊涂了!!! 有没有直接的方法只需要选择一个,而不需要再次处理? 如下所示(我确认结果只有一个,因为我使用了where id=xxx)在laravel上使用get和first时,模型和查询生成器方法之间的区别是什么?,laravel,collections,model,laravel-query-builder,Laravel,Collections,Model,Laravel Query Builder,如果我只想得到一个列名 --使用模型-------- ---使用查询生成器----- 有什么区别?模型或查询方法不都是集合吗?还是对象?(数组?)我搞糊涂了!!! 有没有直接的方法只需要选择一个,而不需要再次处理? 如下所示(我确认结果只有一个,因为我使用了where id=xxx) 区别很简单: first()从数据库获取单个记录 get()获取项的集合(类似于数组) 因此,对于first()您可以使用$model->property获取模型属性,但是对于get您有多个项目,因此您可以使用
区别很简单:
从数据库获取单个记录first()
获取项的集合(类似于数组)get()
first()
您可以使用$model->property
获取模型属性,但是对于get
您有多个项目,因此您可以使用循环获取属性:
foreach ($models as $model) {
$model->property;
}
当您像这样运行get()
和以后的first
时,您可以运行两个查询,但您也可以对已从数据库中获取的项目调用first
:
$models = Model::select('name')->where('id','=',10)->get();
foreach ($models as $model) {
echo $model->name;
}
$firstModel = $models->first();
$want = $firstModel->name;
区别很简单:
从数据库获取单个记录first()
获取项的集合(类似于数组)get()
first()
您可以使用$model->property
获取模型属性,但是对于get
您有多个项目,因此您可以使用循环获取属性:
foreach ($models as $model) {
$model->property;
}
当您像这样运行get()
和以后的first
时,您可以运行两个查询,但您也可以对已从数据库中获取的项目调用first
:
$models = Model::select('name')->where('id','=',10)->get();
foreach ($models as $model) {
echo $model->name;
}
$firstModel = $models->first();
$want = $firstModel->name;
为了回答这个问题,
Model
、DB::table()
、->get()
和->first()
的组合都返回不同的内容
第一个实例,模型
和->-get()
:
第二,型号
和->first()
:
第三,DB::table()
和->get()
:
第四,DB::table()
和->first()
:
希望这能把一切都弄清楚。还有一些附加的闭包,例如
find()
,findOrFail()
,paginate()
,等等,它们都返回类似的东西,所以请使用这些闭包,看看什么最适合您的需要。要回答这个问题,请将模型
,DB::table()
,->get()
和->首先()
所有返回的内容都不同
第一个实例,模型
和->-get()
:
第二,型号
和->first()
:
第三,DB::table()
和->get()
:
第四,DB::table()
和->first()
:
希望这能把一切都弄清楚。还有一些附加的闭包,例如
find()
,findOrFail()
,paginate()
,等等,它们都返回类似的东西,所以请使用这些闭包,看看什么最适合您的需要。谢谢键入错误,已经修复了。谢谢键入错误,已经修复了。所以查询是单个stdClass,使用$result->name;查询是一个集合,是否使用$result[0]['name']获取第一项?Paginate必须是一个集合,所以是否使用$Paginate[0]['name']?但当控制器发送到视图并与(result,$result)一起使用时,它将成为刀片服务器上的stdClass,使用$result->name?不完全正确。当它是模型
或stdClass
时,使用$Model->{property}
访问名称。当它是集合时
,使用循环访问每个模型
或stdClass
,或$Collection->first()->{property}
,或$Collection[index]->{property}
。将其传递给视图不会改变类型;查询是一个集合,是否使用$result[0]['name']获取第一项?Paginate必须是一个集合,所以是否使用$Paginate[0]['name']?但当控制器发送到视图并与(result,$result)一起使用时,它将成为刀片服务器上的stdClass,使用$result->name?不完全正确。当它是模型
或stdClass
时,使用$Model->{property}
访问名称。当它是集合时
,使用循环访问每个模型
或stdClass
,或$Collection->first()->{property}
,或$Collection[index]->{property}
。将其传递给视图不会改变类型,但我想得到的结果是我确认的唯一结果。所以我可以使用$models=Model::…->get()->first()和$models->name?省略foreach?$A=A->get(),$B=$A->first()两个步骤不同于一个步骤$B=A->get()->first()或$B=A->first()?@robspin如果确定只有一条记录,则应使用A->first()
。它只需要从数据库中获取一条记录,您可以直接访问模型(无需任何循环),但我希望得到的结果是我确认的唯一结果。所以我可以使用$models=Model::…->get()->first()和$models->name?省略foreach?$A=A->get(),$B=$A->first()两个步骤不同于一个步骤$B=A->get()->first()或$B=A->first()?@robspin如果确定只有一条记录,则应使用A->first()
。它只从数据库中获取一条记录,您可以直接访问模型(无需任何循环)
$models = Model::select('name')->where('id','=',10)->get();
foreach ($models as $model) {
echo $model->name;
}
$firstModel = $models->first();
$want = $firstModel->name;
$collection = Model::get();
// Returns a `Collection` of `Model` records, constrained to your additional query logic.
$model = Model::first();
// Returns a single `Model`, or `null`, based on your query logic.
$collection = DB::table("table")->get();
// Returns a `Collection` of `stdClass` objects, based on your query logic.
$record = DB::table("table")->first();
// Returns a single `stdClass`, or `null`, based on your query logic.