Php Laravel从多对多条件检索具有条件的数据

Php Laravel从多对多条件检索具有条件的数据,php,laravel,Php,Laravel,我有三张桌子: email_accounts (list of business emails) ------------- id email sender_name 这种雄辩的关系被宣布为: User ------ public function emailAccounts() { return $this->belongsToMany(EmailAccount::class,'email_accounts_users'); }

我有三张桌子:

email_accounts (list of business emails)
-------------
id
email
sender_name
这种雄辩的关系被宣布为:

    User
    ------
    public function emailAccounts()
    {
        return $this->belongsToMany(EmailAccount::class,'email_accounts_users');
    }

    EmailAccount
    ------------
    public function users()
    {
        return $this->belongsToMany(User::class,'email_accounts_users');
    }

我正在尝试从属于当前用户的
电子邮件帐户
中获取行。 这可以正确地提取为:

$email_acc = \DB::table('email_accounts')
            ->join('email_accounts_users', 'email_accounts_users.email_account_id', 'email_accounts.id')
            ->join('users', 'users.id', 'email_accounts_users.user_id')
            ->select('email_accounts.*')
            ->where('user_id',auth()->user()->id)
            ->get();
dd($email_acc);
然而,我试图与拉威尔雄辩的模型。 因此,我尝试如下:

$email_acc = EmailAccount::with(['users' => function(){
    $query->where('users_id',auth()->user()->id)
}])->get();
dd($email_acc);
但是,它返回来自
电子邮件帐户的所有电子邮件,而不是从用户表中过滤数据,只发送当前登录用户的
。从用户表

但是,我的要求是从属于当前登录用户的
email\u帐户
获取电子邮件


类似于

指定外键,如下所示

public function emailAccounts()
    {
        return $this->belongsToMany(EmailAccount::class,'email_accounts_users', 'id', 'email_account_id' );
    }

    EmailAccount
    ------------
    public function users()
    {
        return $this->belongsToMany(User::class,'email_accounts_users', 'id', 'user_id');
    }
试试这个

$email_acc = EmailAccount::whereHas('users', function($query) {
    $query->where('id',auth()->user()->id);
})
->get();
dd($email_acc);
如果记录不存在,它将返回空集合

或者您也可以使用登录的用户实例获取

$user = auth()->user();
return $user->emailAccounts;
确保你定义了完美的关系


阅读

$email\u acc=auth()->user()->emailAccounts
users\u id
vs.
user\u id
我不知道这是如何工作的:EmailAccount::whereHas('users',function($query){$query->where('user\u id',auth()->user()->id);}->get();而不是id它的
user\u id
name表单透视列工作空间从用户表(关系)中进行筛选。在排序中,您可以使用关系进行筛选
$email_acc = EmailAccount::whereHas('users', function($query) {
    $query->where('id',auth()->user()->id);
})
->get();
dd($email_acc);
$user = auth()->user();
return $user->emailAccounts;