Laravel 5:返回除created_at和udpated_at之外的所有字段

时间:2017-07-17 16:37:06

标签: laravel-5 eloquent laravel-eloquent

我有下一个代码:

$list = Prov::all();

我需要使用Eloquent在Laravel中返回除“created_at”,“updated_at”和“state”之外的所有字段。

我该怎么做?

2 个答案:

答案 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()