产品和用户多对多,判断产品是否关联过用户,
产品和用户多对多,判断产品是否关联过用户
$user = auth()->user();
$products = Product::all();
// 判断产品里面是否有用户
foreach($products as $product) {
$existUsers = $product->users()->where('id', $user->id)->first();
$product->submitted = $existUsers ? true : false;
}
// 看了评论,我改成这样了,的确之前的是N+1
$user = auth()->user();
$products = Product::with('users')->get()->transform(function($product) use ($user) {
$productUserIds = $product->users->pluck('id')->toArray();
$product->submitted = in_array($user->id, $productUserIds) ? true : false;
return $product;
});
return $products;
// 发现了有个方法contains, 这是我想要的,firstWhere和where其实也是colloection 里面的方法,这是我没想到的。
$user = auth()->user();
$products = Product::with('users')->get()->transform(function($product) use ($user) {
$product->submitted = $product->users->contains($user);
return $product;
});
return $products;
盲写一下,有错误或更好的请各位指出。