我有以下Eloquent 的模型:

User | id

Post | id

Comment | id | post | id |用户| id

使用eloquent,如何获取特定用户尚未发表 comments 的所有帖子?

到目前为止我试过:

在型号Post中:

public function noCommentOf(User $user) {
    $this->hasNot('App\Comment')->commentOf($user);
}

在型号Comment中:

public function commentOf($query, User $user) {
    return $query->where('user_id', '=', $user->id);
}

推荐答案

我可以通过查询Post模型和whereDoesnthave关系来实现这一点.在控制器中:

public function getPostsWithoutCommenter(){
  $userId = 1; // Could be `$user`, `use($user)` and `$user->id`.
  $posts = \App\Post::whereDoesntHave("comments", function($subQuery) use($userId){
    $subQuery->where("user_id", "=", $userId);
  })->get();
}

这将假定Post模型上的comments定义为:

public function comments(){
  return $this->hasMany(Comment::class);
}

基本上,如果comments$userId的判断的关系返回Collection,那么它将从结果集中被忽略.

Laravel相关问答推荐

在Vite list 中找不到文件:Resources/scss/hrms.scss.如何使用LARAVEL VITE解决这个问题?

Laravel复选框值更新

在Laravel中URL中添加保护ID

如何在 Laravel 中填充以后执行的条件

如何保存/重定向 Laravel Artisan 命令的输出?

在 apache docker 容器中运行虚拟主机

Laravel 5.1 是否与 PHP 7 兼容

查询构建器中的 Laravel 5 多重 Select ()

会话中的 Laravel 存储数组

SQLSTATE [HY000]:一般错误:1005 无法创建表 - Laravel 4

Laravel 5.3 Electron邮件队列中不允许序列化关闭

Array_unique 上一个 laravel Eloquent的集合

Laravel Artisan CLI 安全地停止守护进程队列工作者

Composer 致命错误:声明 Fxp... 必须与第 334 行的 ...AbstractAssetsRepository.php 兼容

Laravel 5 与 Postgresql

Laravel db 迁移 - renameColumn 错误 - 请求了未知的数据库类型枚举

测试指向外部站点的重定向链接

Laravel 4:将什么作为参数传递给 Url 类?

如何在 Laravel 4 中组织不同版本的 REST API 控制器?

Laravel X-CSRF-Token 与 POSTMAN 不匹配