我正在尝试针对特定用户检索我的愿望清单表中的数据,到目前为止,它仅检索表中的第一个数据,只是返回一个数组,而不是返回具有相同用户ID的表中的三个数组
public function getWishlistByUserId($id){
$wishlists = Wishlist::where('userId', $id)->get();
foreach($wishlists as $wishlist){
$products = Product::where('id', $wishlist->productId)->get();
return $products;
}
}
答案 0 :(得分:2)
发生这种情况是因为foreach
循环在第一次迭代期间返回了一个值。将您的return
语句放在循环外。另外,您可以使用relationships来提高性能。
一个例子可能是:
// Product.php
public function wishlists()
{
return $this->hasMany(Wishlist::class);
}
// Your method
public function getWishlistByUserId($id)
{
return Product::whereHas('wishlists', function ($query) use ($id) {
$query->where('userId', $id);
});
}
答案 1 :(得分:1)
理想情况下,这是n + 1种情况
所以我建议使用laravel关系,例如:
您的收藏夹模型中的
public function getWishlistByUserId($id){
$wishlists = Wishlist::with('product')->where('userId', $id)->get();
}
获取具有关系的数据
library("rio")
library("dplyr")
data <- list.files( # find respective files
path = "./Thesis_Folder",
pattern = ".csv$", # you might want a more specific regex if possible
full.names = TRUE
) %>%
lapply(import) %>% # import from rio usually works well
bind_rows() # bind the list of data.frames to one big df
答案 2 :(得分:0)
我终于能够以这种方式使它工作,我只是将结果推送到一个数组中,然后在循环外将其返回,谢谢大家的帮助
public function getWishlistByUserId($id){
$wishlists = Wishlist::where('userId', $id)->get();
$wishlist = [];
foreach($wishlists as $wish){
$product = Product::where('id', $wish->productId)->get();
array_push($wishlist, $product);
}
return $wishlist;
}