我应该在 Laravel 的多重模型中使用什么 eloquent 关系
What eloquent relation should I use in my multiple model in Laravel
我正在使用订单 ID 查看特定订单库。我在显示与订单相关的公司时没有问题,但后来我意识到我还需要 显示订购该公司的联系人 我需要在视图中显示它。
经过挖掘我了解到我可以使用 hasManyThrough 但不知道如何实际显示数据。我什至不确定 hasManyThrough 是否可以满足我的需求。
这是简化的 table 关系;
Companies Contacts Orders
id companies_id company_id
联系人table屏幕
公司table
订单table
公司型号
public function orders()
{
return $this->hasManyThrough(
Orders::class,
Contacts::class,
'companies_id',
'company_id',
'id',
'id'
);
}
订单型号
public function companies()
{
return $this->hasOne('App\Companies', 'id','company_id');
}
public function contact()
{
return $this->hasOne('App\Contacts', 'id','companies_id');
}
我正在尝试像这样显示数据
<div class="col-xs-6">
<strong>TO:</strong>
<h4>{{ $orders->companies->comp_name }}</h4> //this is ok
<p>{{ $orders->companies->comp_address }}</p> //this is ok
<p>{{ $orders->contact['cont_name'] }}</p> //this should be the contact person from that company
</div>
关于如何实现这一点有什么建议吗?非常感谢您!
您需要 hasManyThrough
级联一对多对多样式。就像一个艺术家有很多专辑有很多歌曲一样,一个艺术家通过专辑有很多歌曲(艺术家->专辑->歌曲)。
你的情况:
1- 公司有一个或多个联系人,假设您将使用业务逻辑代码将其限制为 1 个
2- 一个公司有很多订单,一个订单属于一个公司
3- 联系人属于公司
所以你可以使用代码:
更新 -----
正如您在评论中指定的公司可以有多个联系人,那么您可以定义一个额外的 hasMany
与联系人的关系。
在公司模型中
<?php
// Companies model
public function contact()
{
return $this->hasOne('App\Contacts', 'companies_id');
}
public function contacts()
{
return $this->hasMany('App\Contacts', 'companies_id');
}
public function orders()
{
return $this->hasMany('App\Orders', 'company_id');
}
在联系人模型中
<?php
// Contacts model
// Keep it singular since it's only one Company
public function company()
{
return $this->belongsTo('App\Companies', 'companies_id');
}
订购型号
<?php
// Orders model
// Keep it singular since it's only one Company
public function company()
{
return $this->belongsTo('App\Companies', 'company_id');
}
最后在 Blade 视图中
<div class="col-xs-6">
<strong>TO:</strong>
<h4>{{ $orders->company->comp_name }}</h4> //this is ok
<p>{{ $orders->company->comp_address }}</p> //this is ok
<p>{{ $orders->company->contact->cont_name }}</p> //this should be ok
</div>
我正在使用订单 ID 查看特定订单库。我在显示与订单相关的公司时没有问题,但后来我意识到我还需要 显示订购该公司的联系人 我需要在视图中显示它。
经过挖掘我了解到我可以使用 hasManyThrough 但不知道如何实际显示数据。我什至不确定 hasManyThrough 是否可以满足我的需求。
这是简化的 table 关系;
Companies Contacts Orders
id companies_id company_id
联系人table屏幕
公司table
订单table
公司型号
public function orders()
{
return $this->hasManyThrough(
Orders::class,
Contacts::class,
'companies_id',
'company_id',
'id',
'id'
);
}
订单型号
public function companies()
{
return $this->hasOne('App\Companies', 'id','company_id');
}
public function contact()
{
return $this->hasOne('App\Contacts', 'id','companies_id');
}
我正在尝试像这样显示数据
<div class="col-xs-6">
<strong>TO:</strong>
<h4>{{ $orders->companies->comp_name }}</h4> //this is ok
<p>{{ $orders->companies->comp_address }}</p> //this is ok
<p>{{ $orders->contact['cont_name'] }}</p> //this should be the contact person from that company
</div>
关于如何实现这一点有什么建议吗?非常感谢您!
您需要 hasManyThrough
级联一对多对多样式。就像一个艺术家有很多专辑有很多歌曲一样,一个艺术家通过专辑有很多歌曲(艺术家->专辑->歌曲)。
你的情况:
1- 公司有一个或多个联系人,假设您将使用业务逻辑代码将其限制为 1 个
2- 一个公司有很多订单,一个订单属于一个公司
3- 联系人属于公司
所以你可以使用代码:
更新 -----
正如您在评论中指定的公司可以有多个联系人,那么您可以定义一个额外的 hasMany
与联系人的关系。
在公司模型中
<?php
// Companies model
public function contact()
{
return $this->hasOne('App\Contacts', 'companies_id');
}
public function contacts()
{
return $this->hasMany('App\Contacts', 'companies_id');
}
public function orders()
{
return $this->hasMany('App\Orders', 'company_id');
}
在联系人模型中
<?php
// Contacts model
// Keep it singular since it's only one Company
public function company()
{
return $this->belongsTo('App\Companies', 'companies_id');
}
订购型号
<?php
// Orders model
// Keep it singular since it's only one Company
public function company()
{
return $this->belongsTo('App\Companies', 'company_id');
}
最后在 Blade 视图中
<div class="col-xs-6">
<strong>TO:</strong>
<h4>{{ $orders->company->comp_name }}</h4> //this is ok
<p>{{ $orders->company->comp_address }}</p> //this is ok
<p>{{ $orders->company->contact->cont_name }}</p> //this should be ok
</div>