Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带轴和轴的Laravel_Php_Laravel_Eloquent_Pivot - Fatal编程技术网

Php 带轴和轴的Laravel

Php 带轴和轴的Laravel,php,laravel,eloquent,pivot,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->belongsToM

我正在尝试提取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的联系人

尝试添加:

Company::with('mainContact')->get()返回所有公司和所有联系人。您应该执行
$company->main contacts()->get()取而代之

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

首先,出于我不确定的原因,您需要添加
withPivot('main_contact')到您的关系。这将在您的收藏中的
pivot
下返回
main\u 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) use ($contact){
    $query->wherePivot('main_contact', $contact);
}])->get();

这将创建N+1个查询(即,对于10000行的表,将创建10001个查询),而不是仅创建2个查询@AlexeyMezenin和eager loading
$query->main contact
为公司提供了main_contact 1。如果可能,只需进行两次查询。(实际上还有一些关系需要加载。@Linus
foreach($q)中的行{$q->minContact;}
将只给最小联系人值为1的公司。尝试了这个方法。它返回相同的结果。这就像在使用所有内容时一样,默认值被忽略;->orderby您可以检查您的mysql查询日志并将原始SQL查询复制到您的问题中吗?
$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();