Возвращать только определенные данные из коллекции - Laravel - PullRequest
0 голосов
/ 08 июня 2018

Я изучаю Laravel и создал общедоступную конечную точку, где я хочу выводить только определенную информацию о некоторых комментариях, если пользователь не аутентифицирован из запроса GET.

Мне удалось отфильтроватькомментарии основаны на том, утверждены они или нет.Теперь я хочу отфильтровать данные, которые возвращаются.Я приложил скриншот того, что в настоящее время возвращается.

enter image description here

В идеале я хочу вернуть только идентификатор, имя и тело в json.Как я могу пойти по этому поводу?Я попробовал метод 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 голосов
/ 08 июня 2018

Вы можете использовать преобразователь, чтобы отобразить входящие данные в разумный вывод на основе состояния аутентификации.Следующий пример взят из библиотеки Fractal:

<?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 и передают правильный выходной.

0 голосов
/ 08 июня 2018

Если вы хотите передать результат как json respose

$ comments = Comment :: where ('Approved', 1) -> pluck ('id', 'name', 'body') -> toArray ();

return Response :: json ($ comments);

Если вы хотите передать результат как блэйд

$ comments = Comment :: where('Approved', 1) -> pluck ('id', 'name', 'body') -> toArray ();

возврат представления ('your_blade_name') -> with ('comments',$ комментарии);

0 голосов
/ 08 июня 2018

Чтобы выбрать конкретные столбцы, вы можете передать имя столбца get как

$comments = Comment::where('approved', 1) -> get(['id','name','body']); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...