【问题标题】:Return only certain data in from a collection - Laravel仅从集合中返回某些数据 - Laravel
【发布时间】:2018-06-08 15:08:02
【问题描述】:

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

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

理想情况下,我只想在 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');

    }
}

【问题讨论】:

  • 试试$comments = Comment::where('approved', 1)->get(['id','name','body']);
  • 感谢您抽出宝贵时间回复。有效。我完全忘记了你可以将参数传递给get()。仍在我大脑中融合 Laravel 矩阵。
  • 很高兴能帮上忙,编码愉快

标签: php laravel eloquent


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以使用转换器将传入的数据映射到基于身份验证状态的合理输出。以下示例来自 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 扩展的类并将正确的类传递给输出。

    【讨论】:

    • 感谢您抽出宝贵时间回复一个全面的解决方案。如果我要查询更多数据,我肯定会使用它。目前答案效果很好
    • 答案看起来不错,但我建议您看看转换器,因为它们可以帮助您将 db 结构与 API 响应分开。
    【解决方案3】:

    如果你想将结果作为 json respose 传递

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

    返回响应::json($cmets);

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

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

    return view('your_blade_name')->with('cmets',$cmets);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-12
      • 1970-01-01
      相关资源
      最近更新 更多