laravel - Laravel如何仅获取关系数据
问题描述
这是我的 User.php 关系代码
public function activities()
{
return $this->hasMany(Activities::class, 'builder');
}
这是我只获取关系数据的查询
return User::whereHas('activities', fn($query) => $query->where('user_id', 1))
->paginate();
但它只返回用户数据而不应用任何关系,并且它的分页无法使用pluck
我也试过这个
User::where('username', request()->username)->has('activities')->paginate();
但我只需要获取关系数据而不是用户与关系,我更喜欢这样做whereHas
解决方案
您需要为Activities
模型创建反向关系:
class Activities extends Model
{
// ...
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'user_id');
}
}
并使用活动生成器获取所有活动:
$paginated = Acitivities::query()
->whereHas('user', static function(Builder $userQuery) {
$userQuery->where('name', request()->username); // Think about security!
})
->paginate();
注意:所有模型必须以单数命名(例如 Activity、User、Product 等)。
推荐阅读
- reactjs - 使用 axios 和 React 创建轮询
- python - 对于只能迭代一次的集合,什么是好的 API?
- java - 使用 @Component 强制使用 @Autowired 使用
- excel - 在表格中逐行“直到”直到在VBA中找到第一个彩色单元格?
- unit-testing - 如何在集成测试中模拟 BLoC
- activerecord - 如何在 `around_destroy` 回调中处理 Active Record `destroy` 的结果
- javascript - 中断数据流并断开设备
- php - ajax请求后取消url重定向
- scala - 无法解析 Intellij 中的 Ammonite 主要方法
- node.js - 使用 octokit 添加用户作为 github 组织的协作者以 404 结束