Laravel 与和 wherePivot
Laravel With and wherePivot
我正在尝试提取 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();
这 returns 家公司 + 公司的所有联系人,而不仅仅是 main_contact = 1 的公司。
尝试添加withPivot()
:
return $this->belongsToMany('App\Contact', 'company_contacts')
->withPivot('main_contact')
->wherePivot('main_contact', '=', 1);
Company::with('mainContact')->get();
returns 所有公司和所有联系人。您应该改为 $company->mainContacts()->get();
。
$companies=Company::all();
foreach($companies as $company)
{
print_r($company->mainContact()->get());
}
die;
首先,出于我不确定的原因,您需要将 withPivot('main_contact');
添加到您的关系中。这将 return main_contact
在您的 collection 下 pivot
class Company extends Model
{
public function mainContact()
{
return $this->belongsToMany('App\Contact', 'company_contacts')
->withPivot('main_contact');
}
}
你需要做的第二件事是使用 withPivot()
而 constraint eager loading 像这样:
$companies = Company::with(['mainContact'=> function($query){
$query->wherePivot('main_contact', 1);
}])->get();
我已经检查过了,它有效。
只是为了超越一点。有时您会想在不知道值的情况下查询数据透视表 table。您可以这样做:
$companies = Company::with(['mainContact'=> function($query) use ($contact){
$query->wherePivot('main_contact', $contact);
}])->get();
我正在尝试提取 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();
这 returns 家公司 + 公司的所有联系人,而不仅仅是 main_contact = 1 的公司。
尝试添加withPivot()
:
return $this->belongsToMany('App\Contact', 'company_contacts')
->withPivot('main_contact')
->wherePivot('main_contact', '=', 1);
Company::with('mainContact')->get();
returns 所有公司和所有联系人。您应该改为 $company->mainContacts()->get();
。
$companies=Company::all();
foreach($companies as $company)
{
print_r($company->mainContact()->get());
}
die;
首先,出于我不确定的原因,您需要将 withPivot('main_contact');
添加到您的关系中。这将 return main_contact
在您的 collection 下 pivot
class Company extends Model
{
public function mainContact()
{
return $this->belongsToMany('App\Contact', 'company_contacts')
->withPivot('main_contact');
}
}
你需要做的第二件事是使用 withPivot()
而 constraint eager loading 像这样:
$companies = Company::with(['mainContact'=> function($query){
$query->wherePivot('main_contact', 1);
}])->get();
我已经检查过了,它有效。
只是为了超越一点。有时您会想在不知道值的情况下查询数据透视表 table。您可以这样做:
$companies = Company::with(['mainContact'=> function($query) use ($contact){
$query->wherePivot('main_contact', $contact);
}])->get();