Laravel With 和 wherePivot

Lin*_*nus 6 php pivot laravel eloquent

我正在尝试使用pivot.main_contact = 1提取所有公司和联系人。

表格:

Company: id, name
Company_contacts: id, company_id, contact_id, main_contact
Contacts: id, name
Run Code Online (Sandbox Code Playgroud)

模型:

class Company extends Model
{
        public function mainContact()
    {
        return $this->belongsToMany('App\Contact', 'company_contacts')
                        ->wherePivot('main_contact', '=', 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

$query = Company::with('mainContact')->get();   
Run Code Online (Sandbox Code Playgroud)

这将返回公司 + 公司的所有联系人,而不仅仅是 main_contact = 1 的联系人。

use*_*126 5

首先,出于我不确定的原因,您需要添加withPivot('main_contact');您的关系。这将返回main_contact到您的收藏中pivot

class Company extends Model
{
        public function mainContact()
    {
        return $this->belongsToMany('App\Contact', 'company_contacts')
                        ->withPivot('main_contact');
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要做的第二件事是使用withPivot()while约束预加载,如下所示:

$companies = Company::with(['mainContact'=> function($query){
    $query->wherePivot('main_contact', 1);
}])->get();
Run Code Online (Sandbox Code Playgroud)

我已经检查过了,它有效。

只是为了超越一点。有时您可能想要在不知道值的情况下查询数据透视表。您可以通过以下方式执行此操作:

$companies = Company::with(['mainContact'=> function($query) use ($contact){
    $query->wherePivot('main_contact', $contact);
}])->get();
Run Code Online (Sandbox Code Playgroud)