在我的愿望清单表上显示所有内容时遇到困难

时间:2019-06-03 16:52:09

标签: php laravel

我正在尝试针对特定用户检索我的愿望清单表中的数据,到目前为止,它仅检索表中的第一个数据,只是返回一个数组,而不是返回具有相同用户ID的表中的三个数组

 public function getWishlistByUserId($id){
    $wishlists = Wishlist::where('userId', $id)->get();
    foreach($wishlists as $wishlist){
        $products = Product::where('id', $wishlist->productId)->get();
        return $products;
    }
}

3 个答案:

答案 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;

}