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()->emailAccountsusers\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;