仅返回集合中的某些数据 - Laravel

时间:2018-06-07 22:24:31

标签: php laravel eloquent

我正在学习Laravel并创建了一个公共端点,如果用户未通过GET请求进行身份验证,我只想输出某些评论的某些信息。

我已设法根据评论是否获得批准来过滤评论。我现在想要过滤掉返回的数据。我附上了当前返回的截图。

enter image description here

理想情况下,我只想在json中返回id,name和body。我怎么能这样做?我尝试了pluck()方法,但没有给出预期的结果。任何指针都将非常感激

public function index(Request $request)
{
    if (Auth::guard('api')->check()) {

        return Comment::all();

    } else {

        $comments = Comment::where('approved', 1)->get();

        return $comments->pluck('id','name','body');

    }
}

3 个答案:

答案 0 :(得分:2)

要选择特定列,您可以将列名称传递给get

$comments = Comment::where('approved', 1) -> get(['id','name','body']); 

答案 1 :(得分:1)

您可以使用变换器将输入数据映射到基于身份验证状态的合理输出。以下示例来自Fractal lib:

<?php
use Acme\Model\Book;
use League\Fractal;

$books = Book::all();

$resource = new Fractal\Resource\Collection($books, function(Book $book) {
    return [
        'id'      => (int) $book->id,
        'title'   => $book->title,
        'year'    => $book->yr,
        'author'  => [
            'name'  => $book->author_name,
            'email' => $book->author_email,
        ],
        'links'   => [
            [
                'rel' => 'self',
                'uri' => '/books/'.$book->id,
            ]
        ]
    ];
});

理想情况下,您将创建2个从Transformer扩展的类,并将正确的类传递给输出。

答案 2 :(得分:0)

如果要将结果作为json respose

传递

$ comments = Comment :: where('approved',1) - &gt; pluck('id','name','body') - &gt; toArray();

返回Response :: json($ comments);

如果您想将结果传递给刀片

$ comments = Comment :: where('approved',1) - &gt; pluck('id','name','body') - &gt; toArray();

返回视图('your_blade_name') - &gt; with('comments',$ comments);