laravel 仅为“auth”用户加载特定关系
Posted
技术标签:
【中文标题】laravel 仅为“auth”用户加载特定关系【英文标题】:laravel load specific relation only for "auth" users 【发布时间】:2021-09-07 01:09:13 【问题描述】:当用户通过身份验证时,是否有机会让 laravel 只加载特定项目?
假设这段代码:
public function getCategory(Category $category)
$items = $category->products()->with(['otherRelation', 'favouriteUsers' => function($query)
$query->where('user_id', Auth::id())->select(['product_id', 'user_id']);
])->withCount([
'views',
])->latest()->paginate(20);
此时将加载favouriteUsers
关系,无论用户是否经过身份验证,有什么方法可以阻止 laravel 执行此查询,除非用户经过身份验证?
【问题讨论】:
尝试 $items = $category->products()->with(['otherRelation'])->when(Auth::id(),function($query) $query-> whereHas('favouriteUsers' , function($query) $query->where('user_id', Auth::id())->select(['product_id', 'user_id']); ); ) - >withCount([ 'views', ])->latest()->paginate(20); 我认为不是whereHas
而是with
,不是吗?
如果你需要数据那么你可以使用 with 否则 wherehas.wherehas 不会返回 favouriteUsers 的结果。所以如果你正在寻找数据然后使用 with
如果您有任何问题,请告诉我
【参考方案1】:
您需要在User::class
中有关系favoriteProducts()
这样会更容易获得
$user = Auth::user();
$favoriteProducts = $user->favoriteProducts()
->with('otherRelation')
->withCount('views')
->whereHas('category', function($categoryQB) use($category)
$categoryQB->where('id', $category->id);
)
->latest()->paginate(20);
【讨论】:
这里不可能,因为检索到的产品应该都是相关类别的。favouriteUsers
关系仅应在经过身份验证时加载,它在模板中用于检查用户是否可以收藏该产品。以上是关于laravel 仅为“auth”用户加载特定关系的主要内容,如果未能解决你的问题,请参考以下文章
从 5.1 迁移到 5.3 时急切加载关系的 Laravel 错误