0

皆さん、おはようございます。私は文字通り、Laravel とのエンティティ関係の問題で頭がおかしくなっています。Laravel の最新バージョン 8.x を使用しています。私のデータモデルは次のように構成されています。

パーティーテーブル

  1. ID
  2. party_details_id
  3. パーティータイプ

人物表

  1. ID
  2. パーティータイプ('P')
  3. 名前

会社表

  1. ID
  2. パーティータイプ('C')
  3. 名前

例からわかるように、"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

私は何を間違っていますか?この関係を管理するのを手伝ってくれませんか? ありがとう

4

1 に答える 1