Laravel 5.5 - 修改:: all的输出

时间:2018-02-14 15:36:24

标签: laravel

我得到所有的水果'在像这样的Laravel 5.5控制器......

    $fruits = Fruit::all();

    return Response::json(array(
        'error' => false,
        'fruits' => $fruits,
    ));

这是有效的,但是有一种方法可以准确指定出来的数据,就像你只查询一个这样的项目...

$fruit = Fruit::find($id);

$fruit_array = array();

$fruit_array['id'] = $fruit->id;
$fruit_array['title'] = $fruit->title;
$fruit_array['colour'] = $fruit->colour;

return Response::json(array(
    'error' => false,
    'fruits' => $fruits,
));

任何人都有我能看到的例子吗?

4 个答案:

答案 0 :(得分:2)

您可以像这样使用Query Builder

$result = DB::table('fruits')
            ->select('id', 'title', 'colour')
            ->where('id', $id)
            ->get();

答案 1 :(得分:2)

您可以使用Laravel Resources。基本上,您创建了一个扩展Resource类的类,只需调用toArray($request)

因此,您可以创建一个类似于以下内容的FruitResource.php类:

class FruitResource extends \Illuminate\Http\Resources\Json\Resource 
{
    public function toArray($request)
    {
        return [
            'id' => $this-id,
            'title' => $this->title,
            'colour' => $this->colour,
            // anything you want, including more resources or relationships to fruits
            'user' => $this->user
        ];
    }
}

然后你像这样呼叫FruitResource.php

return Response::json(array(
    'error' => false,
    'fruits' => FruitResource::collection($fruits),
));

我喜欢这种方式的原因是,当您需要在响应中进行大量自定义时,您可以在新资源中很好地组织它们。

答案 2 :(得分:1)

您可以在模型中使用$visible protected属性。 $visible是一个数组,用于保存您希望在JSON输出中显示的键/值对。

  

或者,您可以使用visible属性来定义白名单   属性应该包含在模型的数组和JSON中   表示。模型出现时,将隐藏所有其他属性   转换为数组或JSON。

JSON Visibility

所以在你的模型中为类添加一个属性:

protected $visible = [
    'id' => $this->id,
    'title' => $this->title,
    'colour' => $this->colour,
];

此外,如果您想添加列中不存在的更多信息,可以使用$appendsAppends Docs

如果您有一个名为getIsFancyAttribute()的访问者,则可以使用:

protected $appends = [ 'is_fancy' => $this->is_fancy '];

答案 3 :(得分:1)

您可以在pass方法中find()其他属性数组来指定您想要column的{​​{1}}数据:

fetch