如果我只想获得一个列名
-使用模型--------
$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').....
答案 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)
要回答这个问题,Model
,DB::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()
等,它们都返回相似的内容,因此请使用它们,并查看最适合您需要的内容。