无需映射即可从书签中获取所有对象
Getting all the objects from a bookmark without mapping
我正在开发一个允许学生搜索并获得房屋的平台。我正在尝试实现一项功能,允许学生为房子添加书签,以便他们以后可以查看它。我遇到的问题是如何检索用户已经加入书签的房屋。我目前通过映射来完成,但这会导致嵌套数组。我知道有一种方法可以不用映射就可以做到。如果有任何帮助,我将不胜感激。
BookmarkController.php
public function userBookmarks()
{
$user = $this->authUser();
$bookmarks = Bookmark::where('user_id', $user->id)->get();
if (count($bookmarks) > 0) {
$bookmark = $bookmarks->map(function ($favorite, $key) {
$response = [
"status" => true,
"message" => "User's favorites successfully retrieved",
"data" => House::find($bookmark->house_id),
];
return $response;
});
return response()->json($bookmark);
} else {
return response()->json([
"message" => "This user doesn't have any favorites yet",
"data" => null,
]);
}
}
User.php
public function bookmarks(){
return $this->hasMany('App\Favorite');
}
Bookmark.php
public function user(){
return $this->belongsTo(User::class);
}
这就是为什么在 map
函数中 $booksmark
变量不存在的原因!
我猜你的意思是$favourite
(看看你在匿名函数中传递的参数)。
看看这段代码:
public function userBookmarks()
{
$bookmarks = Bookmark::where('user_id', $this->authUser()->id)->get();
if (empty($bookmarks)) {
return response()->json([
"message" => "This user doesn't have any favorites yet",
"data" => null,
]);
}
$bookmark = $bookmarks->map(function (Bookmark $favorite): array {
return [
"status" => true,
"message" => "User's favorites successfully retrieved",
"data" => House::find($favorite->house_id),
];
});
return response()->json($bookmark);
}
编辑:如果你想在匿名函数中传递一个变量,可以使用 use
关键字。
类似于(如果 $favourite
来自其他地方):
$fixedPrice = 100;
$items->map(function(Item $item) use ($fixedPrice): array {
return [
'id' => $item->id,
'price' => $fixedPrice.
];
});
我想出了一个解决方案。
public function userFavorites(){
$user = $this->authUser();
$bookmarks = $user->bookmarks;
if(!empty($bookmarks)){
$houseIds = $bookmarks->pluck('house_id');
$houses = House::whereIn('id',$arr)->get();
$response = [
"status" => true,
"message" => "User's bookmarks successfully retrieved",
"data" => $houses
];
return response()->json($response);
}
else
{
return response()->json([
"status"=> true,
"message" => "This user doesn't have any bookmarks yet",
"data" => null
]);
}
}
我正在开发一个允许学生搜索并获得房屋的平台。我正在尝试实现一项功能,允许学生为房子添加书签,以便他们以后可以查看它。我遇到的问题是如何检索用户已经加入书签的房屋。我目前通过映射来完成,但这会导致嵌套数组。我知道有一种方法可以不用映射就可以做到。如果有任何帮助,我将不胜感激。
BookmarkController.php
public function userBookmarks()
{
$user = $this->authUser();
$bookmarks = Bookmark::where('user_id', $user->id)->get();
if (count($bookmarks) > 0) {
$bookmark = $bookmarks->map(function ($favorite, $key) {
$response = [
"status" => true,
"message" => "User's favorites successfully retrieved",
"data" => House::find($bookmark->house_id),
];
return $response;
});
return response()->json($bookmark);
} else {
return response()->json([
"message" => "This user doesn't have any favorites yet",
"data" => null,
]);
}
}
User.php
public function bookmarks(){
return $this->hasMany('App\Favorite');
}
Bookmark.php
public function user(){
return $this->belongsTo(User::class);
}
这就是为什么在 map
函数中 $booksmark
变量不存在的原因!
我猜你的意思是$favourite
(看看你在匿名函数中传递的参数)。
看看这段代码:
public function userBookmarks()
{
$bookmarks = Bookmark::where('user_id', $this->authUser()->id)->get();
if (empty($bookmarks)) {
return response()->json([
"message" => "This user doesn't have any favorites yet",
"data" => null,
]);
}
$bookmark = $bookmarks->map(function (Bookmark $favorite): array {
return [
"status" => true,
"message" => "User's favorites successfully retrieved",
"data" => House::find($favorite->house_id),
];
});
return response()->json($bookmark);
}
编辑:如果你想在匿名函数中传递一个变量,可以使用 use
关键字。
类似于(如果 $favourite
来自其他地方):
$fixedPrice = 100;
$items->map(function(Item $item) use ($fixedPrice): array {
return [
'id' => $item->id,
'price' => $fixedPrice.
];
});
我想出了一个解决方案。
public function userFavorites(){
$user = $this->authUser();
$bookmarks = $user->bookmarks;
if(!empty($bookmarks)){
$houseIds = $bookmarks->pluck('house_id');
$houses = House::whereIn('id',$arr)->get();
$response = [
"status" => true,
"message" => "User's bookmarks successfully retrieved",
"data" => $houses
];
return response()->json($response);
}
else
{
return response()->json([
"status"=> true,
"message" => "This user doesn't have any bookmarks yet",
"data" => null
]);
}
}