【发布时间】:2018-04-20 07:57:13
【问题描述】:
试图在 Laravel 5.4 中建立一对多的关系。我已经在线阅读了文档和其他资源,但在每种情况下都无法使其正常工作,而且我尝试过的各种方法都会导致不同的错误。
我有以下三个表:
- 帐户
- 联系人
- account_contact(数据透视表)具有以下字段:account_id(int/外键)、contact_id(int/外键)、primary (int)、billing (int)
我正在努力使该帐户可以(但不一定)拥有一个或多个联系人。
我的模型如下:
帐户
public function contacts()
{
return $this->hasMany(Contact::class);
}
联系
public function account()
{
return $this->belongsTo(Account::class)->withPivot('primary', 'billing');
}
然后在我尝试的控制器中说:
$account = Account::find($id);
if($account->isEmpty())
return response()->json(['Account not found.'], 404);
$contact = $account->contacts()->exists();
我收到以下错误:
(1/1) BadMethodCallException 方法联系人不存在。
显然,我想要做的是,当建立联系时,它可以通过数据透视表附加到帐户。 在获取客户时,我可以通过数据透视表获取额外的数据透视表字段,以及属于该客户的联系人。
为了进一步澄清,我正在尝试使用 eloquent,使用枢轴来执行以下查询,而不必在每个实例中都写出来。
$contacts = DB::table('account_contact')
->select('contact_id', 'primary', 'billing')
->where('account_id', $id)
->get();
$accountContacts = [];
foreach($contacts as $c){
$accountContact = Contact::find($c->id);
$accountContacts[] = array(
"id" => $accountContact->id,
"sal" => $sal = $accountContact->salutation == null? '' : $accountContact->salutation,
"firstName" => $accountContact->first_name,
"lastName" => $accountContact->last_name,
);
}
我希望能够做类似的事情 $accounts->pivot->联系人 并得到这样的名字: $accounts->pivot->联系人->first_name
【问题讨论】:
-
所以
account_contact是您的桥接表,它只有两个表的相关列。我说的对吗? -
@HimanshuUpadhyay 是的,我已经更新了问题以显示列
-
拥有数据透视表意味着您拥有多对多关系,而不是一对多关系。
-
@apokryfos 好的,那么我将如何使用中间表设置这种关系?
标签: php eloquent pivot-table laravel-5.4