大家早上好,我真的因为与 Laravel 的实体关系问题而失去理智。我正在使用最新版本的 Laravel 8.x。我的数据模型组成如下。
缔约方表
- ID
- 派对详细信息 ID
- 派对类型
人员表
- ID
- 派对类型('P')
- 姓名
- 姓
公司表
- ID
- 派对类型('C')
- 姓名
- 姓
从示例中可以看出,“Parties”是包含所有各方(包括人员和公司)的表。连接键是双键,即“party_details_id”和“party_type”组成的对。在“Parties”表中,“party_details_id”列可以有两个相等的值,但“party_details_id”和“party_type”只能有一个值。我在 Laravel 上建立关系时遇到了巨大的困难。看了几篇文章,我遇到了这种情况:
缔约方模型
public function companies()
{
return $this->hasMany(Companies::class, 'id', 'party_details_id')->where('party_type', 'C');
}
public function people()
{
return $this->hasOne(People::class, 'id', 'party_details_id')->where('party_type', 'P');
}
人物模型
public function party()
{
return $this->belongsTo(Parties::class, 'party_details_id')->where('party_type', 'P');
}
公司模式
public function party()
{
return $this->belongsTo(Parties::class, 'party_details_id', 'id')->where('party_type', 'C');
}
在测试路线中,我插入了以下代码:
Route::get('/people', function () {
$people = new People();
return $people->with('party')->get()->toArray();
});
我得到的是:
[
{
"id": 1,
"party_type": "P",
"name": "Alex",
"surname": "test",
"created_at": "2021-09-20T20:14:07.000000Z",
"updated_at": null,
"party": null
}
]
从答案中可以看出,“聚会”是空的。为什么?从望远镜中查看启动的查询,我看到了这一点:
select * from `parties` where `party_type` = 'P' and 0 = 1
我究竟做错了什么?你能帮我处理好这段关系吗?谢谢