Laravel With和wherePivot

时间:2016-10-22 21:45:49

标签: php laravel eloquent pivot

我尝试使用pivot.main_contact = 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的公司。

3 个答案:

答案 0 :(得分:0)

尝试添加withPivot()

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

首先,由于我不确定的原因,您需要在您的关系中添加.on('click.fade', fade(1)) .on('click',releasenode) 。这将返回您集合中withPivot('main_contact');下的main_contact

pivot

您需要做的第二件事是像这样使用class Company extends Model { public function mainContact() { return $this->belongsToMany('App\Contact', 'company_contacts') ->withPivot('main_contact'); } } constraint eager loading

withPivot()

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

只是超越一点。有时,您可能想在不了解值的情况下查询数据透视表。您可以通过以下方式实现:

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