Php 雄辩的ORM-如何处理与父模型中同一子模型的两个实例的关系
我有一个名为旅程的父模型,它应该与模型类型地址的两个实例相关,一个用于“起点”,一个用于“终点”。我不知道做这件事最有效的方法是什么。我想使用拉雷维尔的雄辩ORM和渴望加载来实现以下优雅的东西,当我返回旅程时:Php 雄辩的ORM-如何处理与父模型中同一子模型的两个实例的关系,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个名为旅程的父模型,它应该与模型类型地址的两个实例相关,一个用于“起点”,一个用于“终点”。我不知道做这件事最有效的方法是什么。我想使用拉雷维尔的雄辩ORM和渴望加载来实现以下优雅的东西,当我返回旅程时: return Journey::with('origin','destination'); 我尝试了以下方法: 1) 使用雄辩的ORM 意见: 在地址模型中需要“旅程\ id”,这意味着我不能将此模型用于除旅程以外的任何其他用途 地址作为一个整体链接到旅程,所以我无法区分起点和终点实
return Journey::with('origin','destination');
我尝试了以下方法:
1) 使用雄辩的ORM
意见:
- 在地址模型中需要“旅程\ id”,这意味着我不能将此模型用于除旅程以外的任何其他用途
- 地址作为一个整体链接到旅程,所以我无法区分起点和终点实例
- 我现在可以将地址模型与其他模型一起重复使用,但是
- 地址仍然作为一个整体链接到旅程,所以我无法区分起点和终点实例
Journey
-------
id
user_id
origin (address.id)
destination (address.id)
date
Address
-------
id
street
city
zipcode
意见:
- 我现在可以区分源实例和目标实例,但是
- 我想我必须对连接使用流畅的查询,所以我不能将origin和destination作为地址模型返回
- 没有从地址返回到旅程的链接
此外,虽然通过旅程模型访问地址将是主要用例,但我也希望能够通过地址模型访问父旅程。您应该拥有的是: 数据库结构
Journey
---------
id
origin_id
destionation_id
user_id
date
Address
---------
id
street
city
zipcode
然后,使用关系将您的旅程
模型链接到地址
:
travely.php
class Journey extends Model {
// ...
public function origin() {
return $this->belongsTo('Address');
}
public function destination() {
return $this->belongsTo('Address');
}
}
class Address extends Model {
// ...
public function journeysAsOrigin() {
return $this->hasMany('Journey', 'origin_id');
}
public function journeysAsDestination() {
return $this->hasMany('Journey', 'destination_id');
}
}
Address.php
class Journey extends Model {
// ...
public function origin() {
return $this->belongsTo('Address');
}
public function destination() {
return $this->belongsTo('Address');
}
}
class Address extends Model {
// ...
public function journeysAsOrigin() {
return $this->hasMany('Journey', 'origin_id');
}
public function journeysAsDestination() {
return $this->hasMany('Journey', 'destination_id');
}
}
你应该做的是: 数据库结构
Journey
---------
id
origin_id
destionation_id
user_id
date
Address
---------
id
street
city
zipcode
然后,使用关系将您的旅程
模型链接到地址
:
travely.php
class Journey extends Model {
// ...
public function origin() {
return $this->belongsTo('Address');
}
public function destination() {
return $this->belongsTo('Address');
}
}
class Address extends Model {
// ...
public function journeysAsOrigin() {
return $this->hasMany('Journey', 'origin_id');
}
public function journeysAsDestination() {
return $this->hasMany('Journey', 'destination_id');
}
}
Address.php
class Journey extends Model {
// ...
public function origin() {
return $this->belongsTo('Address');
}
public function destination() {
return $this->belongsTo('Address');
}
}
class Address extends Model {
// ...
public function journeysAsOrigin() {
return $this->hasMany('Journey', 'origin_id');
}
public function journeysAsDestination() {
return $this->hasMany('Journey', 'destination_id');
}
}
您是否有多个
旅程
,具有相同的目的地
或起点
?这是最终目标。但现在我可以忍受地址被复制的情况,如果这样做更容易的话。你会有多个旅程
,具有相同的目的地
或来源地
?这是最终目标。但现在我可以忍受地址被复制,如果这能让事情变得更容易的话。