在laravel中定义数据透视表元素的关系

时间:2017-08-17 04:26:09

标签: laravel laravel-5.4 laravel-eloquent

我正在laravel 5.4建立一个小型应用程序,我正在寻找以下模型和关系:

互动模式:

public function contactsAssociation()
{
    return $this->belongsToMany('App\Contact', 'contact_interaction',  'interaction_id', 'contact_id')->withPivot('company_id')->withTimestamps();
}

联系模式:

public function company()
{
    return $this
        ->belongsToMany('App\Company', 'company_contact','contact_id', 'company_id')->withTimestamps();
}

公司型号:

public function contacts()
{
    return $this->belongsToMany('App\Contact', 'company_contact', 'company_id','contact_id');
}

现在我正在获取这样的数据:

$tempData['contacts'] = $interaction->contactsAssociation()->with('company')->get();

我想从关系中提到的数据透视表中提取公司数据。目前我找不到解决方案,所以我必须这样做:

$tempData['contacts'] = $interaction->contactsAssociation()->get();
$companies = [];
foreach($tempData['contacts'] as $contact)
{
    $companies[] = Company::find($contact->pivot->company_id);
}
$tempData['company'] = $companies;

指导我,谢谢,

1 个答案:

答案 0 :(得分:0)

您可以使用要检索的每个字段将数组传递给withPivot()函数:

public function contactsAssociation()
{
    return $this->belongsToMany('App\Contact', 'contact_interaction',  'interaction_id', 'contact_id')
        ->withPivot(['company_id', 'other_field'])
        ->withTimestamps();
}

希望这会对你有所帮助。