Laravel 获取属于其他记录的记录

Laravel 获取属于其他记录的记录,laravel,eloquent,Laravel,Eloquent,我正在尝试获取属于其他记录的记录。这是问题的分类 我有以下文章记录,希望获得拥有状态为(0)的文章的用户: 文章模型如下所示: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $fillable = ['user_id', 'title', 'content', 'status']; public function

我正在尝试获取属于其他记录的记录。这是问题的分类

我有以下文章记录,希望获得拥有状态为(0)的文章的用户:

文章模型如下所示:

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $fillable = ['user_id', 'title', 'content', 'status'];

    public function user()
    {
        return $this->belongsTo('App\User', 'user_id');
    }
}

是否有其他方法获取这些用户的文章记录?

您可以从相反方向执行此操作:

User::whereHas('articles', fn ($q) => $q->whereStatus(0))->get();
获取具有状态为0的任何文章的所有用户

您只需在
用户
上设置
文章
关系即可

如果您希望所有这些用户模型的
articles
关系也仅加载状态为0的文章,则可以执行受约束的即时加载:

User::whereHas('articles', $filter = fn ($q) => $q->whereStatus(0))
    ->with('articles', $filter)
    ->get();
如果您从
$articles
开始,您可以加载
用户关系,然后从集合中提取它们:

$articles->load('user')->pluck('user')->unique()
whereHas

加载

unique

pluck

$articles = Article::with('user')->whereStatus(0)->get();
尝试惰性加载关系。有关更多信息,请参阅下面的链接

$articles->load('user')->pluck('user')->unique()
$articles = Article::with('user')->whereStatus(0)->get();