我是laravel的新手并且对某些查询方法感到困惑。
find($id)
很有用并返回一个很好的数组,但有时我需要选择其他字段而不是id
。
Laravel文档说我可以使用where('field', '=', 'value')
并返回一堆数据,这很好。
我无法理解的是为什么我每次都需要添加->first()
,即使我非常确定只有一行匹配查询。
答案 0 :(得分:6)
它是这样的:
$query->where(..)->orderBy(..)->limit(..) etc.
// you can chain the methods as you like, and finally you need one of:
->get($columns); // returns Eloquent Collection of Models or array of stdObjects
->first($columns); // returns single row (Eloquent Model or stdClass)
->find($id); // returns single row (Eloquent Model or stdClass)
->find($ids); // returns Eloquent Collection
// those are examples, there are many more like firstOrFail, findMany etc, check the api
$columns is an array of fields to retrieve, default array('*')
$id is a single primary key value
$ids is an array of PKs, this works in find method only for Eloquent Builder
// or aggregate functions:
->count()
->avg()
->aggregate()
// just examples here too
因此该方法取决于您要检索的内容(数组/集合或单个对象)
返回对象也取决于您使用的构建器(Eloquent Builder或Query Builder):
User::get(); // Eloquent Colleciton
DB::table('users')->get(); // array of stdObjects
答案 1 :(得分:0)
即使我非常确定只有一行匹配查询。
Laravel不能读懂你的想法 - 所以你需要告诉它你想做什么。
你可以做任何一次
User::where('field', '=', 'value')->get()
将返回与该搜索匹配的所有对象。有时它可能是一个,但有时它可能是2或3 ......
如果你确定只有一个(或者你只想要第一个),你可以做到
User::where('field', '=', 'value')->first()
答案 2 :(得分:0)
,而
当你知道它只返回一行时,你当然可以使用get(),但在解决结果时你需要记住这一点:
使用get()
$rez = \DB::table('table')->where('sec_id','=','5')->get();
//will return one row in an array with one item, but will be addressed as:
$myfieldvalue = $rez[0]->fieldname;
使用first()
$rez = \DB::table('table')->where('sec_id','=','5')->first();
// will also return one row but without the array, so
$myfieldvalue = $rez->fieldname;
所以这取决于你想如何访问查询结果:作为一个对象或一个数组,还取决于你知道什么"查询将返回。