【发布时间】:2020-04-17 19:48:46
【问题描述】:
我正在开发一个 API,在图书模型中,我想给出一个包含图书和图书收藏状态的响应。如果经过身份验证的用户收藏了这本书,那么它应该是真的,否则它应该是假的。这是我想出的代码,但这段代码只循环一次。它有一种方法可以让我循环响应中的所有书籍吗?
public function indexapi(Request $request)
{
$books = BookResource::collection(Book::with('author')->Paginate(16));
$count = Book::with('author')->count();
$Fav = Favorite::where('book_id', $request->book_id)->where('user_id', $request->user_id)->exists();
foreach($books as $key => $book) {
return response()->json([
'book' => $book,
'Favorited' => $Fav,
]
);
}
我正在尝试在我的 API 响应中循环书籍和收藏夹以获得这样的响应
{
"book": {
"id": 2,
"name": "4.50 from Paddington",
"author": {
"id": 2,
"name": "Agatha Christie",
},
},
"Favorited": false
}
{
"book": {
"id": 2,
"name": "4.50 from Paddington",
"author": {
"id": 2,
"name": "Agatha Christie",
},
},
"Favorited": false
}
{
"book": {
"id": 2,
"name": "4.50 from Paddington",
"author": {
"id": 2,
"name": "Agatha Christie",
},
},
"Favorited": true
}
我陷入了困境
我尝试过同时使用“while 循环”和“foreach”。
【问题讨论】:
-
"但这段代码只循环一次。"因为您要在 for-each 中返回 - 尝试将它们放入临时数组、集合等中,然后请返回。
-
@ersoy 请问我该怎么做
-
在 foreach 之前只创建一个 $array = [];并将它们推入 foreach,然后返回该数组。因为您通过在其中使用“return”来返回 foreach 的第一次迭代。