我有下一个代码:
$list = Prov::all();
我需要使用Eloquent在Laravel中返回除“created_at”,“updated_at”和“state”之外的所有字段。
我该怎么做?
答案 0 :(得分:2)
all
方法返回具有所有属性的所有行。如果你想为json隐藏一些字段,只需将它们添加到模型中受保护的$hidden
数组中。
protected $hidden = ["created_at", "updated_at"];
但是如果你想从php eloquent模型中隐藏它们,你可以在这个模型中添加方法,从模型中取消设置给定的属性。然后遍历您的集合并在每个项目上触发自定义方法或使用集合映射:
$modified_items = Prov::all()->map(function($item){
return $item->myUnsettingMethod();
})
当然你仍然可以直接查询:
$provs = DB::table('provs')->select('some_column', 'another_column as ac')->get();
答案 1 :(得分:0)
您可以将字段名称数组传递给all()
,也可以覆盖模型中的all()
函数,并将字段名称作为默认值传递给$ columns数组参数,如:
/**
* Get all of the models from the database. Overrided from Laravel 5.1.27
*
* @param array|mixed $columns // this is where you override instead of '*'
* @return \Illuminate\Database\Eloquent\Collection|static[]
*/
public static function all($columns = ['id','name','description'])
{
$columns = is_array($columns) ? $columns : func_get_args();
$instance = new static;
return $instance->newQuery()->get($columns);
}
解决此问题的其他方法是在模型中创建范围并在此处使用Prov::myFields()->get()