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

在laravel上使用get和first时,模型和查询生成器方法之间的区别是什么?,laravel,collections,model,laravel-query-builder,Laravel,Collections,Model,Laravel Query Builder,如果我只想得到一个列名 --使用模型-------- ---使用查询生成器----- 有什么区别?模型或查询方法不都是集合吗?还是对象?(数组?)我搞糊涂了!!! 有没有直接的方法只需要选择一个,而不需要再次处理? 如下所示(我确认结果只有一个,因为我使用了where id=xxx) 区别很简单: first()从数据库获取单个记录 get()获取项的集合(类似于数组) 因此,对于first()您可以使用$model->property获取模型属性,但是对于get您有多个项目,因此您可以使用

如果我只想得到一个列名

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

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

有什么区别?模型或查询方法不都是集合吗?还是对象?(数组?)我搞糊涂了!!! 有没有直接的方法只需要选择一个,而不需要再次处理? 如下所示(我确认结果只有一个,因为我使用了where id=xxx)


区别很简单:

  • 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.