皆さん、おはようございます。私は文字通り、Laravel とのエンティティ関係の問題で頭がおかしくなっています。Laravel の最新バージョン 8.x を使用しています。私のデータモデルは次のように構成されています。
パーティーテーブル
- ID
- party_details_id
- パーティータイプ
人物表
- ID
- パーティータイプ('P')
- 名前
- 姓
会社表
- ID
- パーティータイプ('C')
- 名前
- 姓
例からわかるように、"Parties" は、個人と会社の両方のすべての関係者を含むテーブルです。接続キーは二重です。つまり、"party_details_id" と "party_type" で形成されるペアです。「Parties」テーブルでは、「party_details_id」列に 2 つの等しい値が存在する可能性がありますが、「party_details_id」と「party_type」の値は 1 つしか存在できません。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
}
]
答えからわかるように、「パーティー」は空です。なんで?Telescope から起動されたクエリを見ると、次のように表示されます。
select * from `parties` where `party_type` = 'P' and 0 = 1
私は何を間違っていますか?この関係を管理するのを手伝ってくれませんか? ありがとう