Laravel With and wherePivot


Laravel With and wherePivot

我试图提取所有公司和联系人与pivot。1.

表:

Company: id, name
Company_contacts: id, company_id, contact_id, main_contact
Contacts: id, name

模型:

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

控制器:

$query = Company::with('mainContact')->get();   

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

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

下的main_contact集合
class Company extends Model
{
        public function mainContact()
    {
        return $this->belongsToMany('App'Contact', 'company_contacts')
                        ->withPivot('main_contact');
    }
}

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

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

我已经检查过了,它可以工作。

就是要超越一点。有时,您希望在不知道数据透视表值的情况下查询数据透视表。您可以这样做:

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

尝试添加withPivot():

return $this->belongsToMany('App'Contact', 'company_contacts')
    ->withPivot('main_contact')
    ->wherePivot('main_contact', '=', 1);

Company::with('mainContact')->get();返回所有公司和所有联系人。你应该做$company->mainContacts()->get();

$companies=Company::all();
foreach($companies as $company)
{
   print_r($company->mainContact()->get());
}
die;