我正在学习Laravel并创建了一个公共端点,如果用户未通过GET
请求进行身份验证,我只想输出某些评论的某些信息。
我已设法根据评论是否获得批准来过滤评论。我现在想要过滤掉返回的数据。我附上了当前返回的截图。
理想情况下,我只想在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');
}
}
答案 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);