如何在 Laravel Eloquent 中选择某些字段?
Posted
技术标签:
【中文标题】如何在 Laravel Eloquent 中选择某些字段?【英文标题】:How to Select Certain Fields in Laravel Eloquent? 【发布时间】:2015-04-16 07:27:44 【问题描述】:如何在 Laravel Eloquent 中进行以下查询?
SELECT catID, catName, imgPath FROM categories WHERE catType = "Root"
我已尝试关注
CategoryModel::where('catType', '=', 'Root')
->lists('catName', 'catID', 'imgPath');
但它只返回两个字段。
Array ( [7] => Category 1 )
【问题讨论】:
CategoryModel::select('catName', 'catID', 'imgPath')->where('catType', '=', 'Root')->get()
会更好吗?
【参考方案1】:
lists()
将生成的集合转换为具有键值的数组。那里只能有两个数据库列。否则你必须使用select()
,但是你会得到一个模型的集合而不仅仅是一个数组。
$categories = CategoryModel::select('catID', 'catName', 'imgPath')
->where('catType', '=', 'Root')
->get();
【讨论】:
有人有文档页面的链接吗?我找不到他们。具体来说,我想更好地理解select()
函数。【参考方案2】:
CategoryModel::wherecatType('Root')
->pluck('catName', 'catID', 'imgPath');
【讨论】:
【参考方案3】:选择多列
CategoryModel::get(['catName', 'catID', 'imgPath']);
也适用于 Laravel 5.3!
【讨论】:
【参考方案4】:从 laravel 版本 5.3^ lists()
已弃用,而使用函数 pluck()
。
pluck()
返回一个集合,如果您需要一个简单的数组,只需将 ->toArray()
添加到它前面。
【讨论】:
【参考方案5】:如果您想获取某些列,那么您可以使用两种方法之一get()
或all()
但两者的语法不同,get()
方法将array
作为参数,all()
方法将string
或array
都作为参数:
Model::all('field1','field2') 以string
作为参数
CategoryModel::all('catName', 'catID', 'imgPath')->where('catType','Root');
Model::all(['field1','field2']) 以array
作为参数
CategoryModel::all(['catName', 'catID', 'imgPath'])->where('catType','Root');
模型::get(['field1','field2'])
CategoryModel::get(['catName', 'catID', 'imgPath'])->where('catType','Root');
【讨论】:
感谢 all() 方法适用于(字符串和数组)laravel 6.x 版 @otosturop,感谢您的建议,我已经更新了答案。 @otosturop,我发现all
方法调用get
方法,但自laravel version 5.1
以来将array
或string
作为参数,所以来自laravel 5.1
string
或 array
都可以在 all()
方法的参数中使用。以上是关于如何在 Laravel Eloquent 中选择某些字段?的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel Eloquent 中,你如何在联合范围之外进行两个联合查询和一个选择?
如何在我的 Eloquent ORM laravel 选择中包含一个过程?