有没有办法获取模型的集合并仅获取存在关系行的对象?

Is there a way to get Collection of a model and get only objects whose relationship rows exists?

我有三个模型 User、Post 和 Comment

User
  -id
Post
  -user_id
Comment
  -post_id

我的 table 有问题,例如,某些帖子不存在或某些用户行不存在。

我怎样才能只获得存在 post_id 并且还存在 user_id 使用范围(最好是全局范围)的用户的评论?

我建议您首先尝试解决数据库中发生的这种异常情况。 您可以使用可为空的外部 ID 和外键约束来实现它。

如果您使用外键约束,则不会发生模型连接到不存在的模型的情况。您可以将其设置为空,即父数据库中不存在的所有外国 ID。

或者您可以使用此代码:

   Comment::whereHas('post', function($q){
    $q->has('user');
   })->get();

假设您已经在模型中设置了relationships,您可以使用whereHas方法获取它们:

$commentsWithPostWhichHaveAUser = Comment::whereHas('Post', function($query){
    $query->has('User');
});