1

次の情報を持つ「ユーザー」というモデルがあります。

id
name
status_id

次の情報を含む「ステータス」というモデルがあります。

id
description

生のクエリを実行すると、当然 2 つのテーブルが結合users.status_id = status.idされますが、Laravel の Eloquent ORM を使用してユーザーのステータス テキストを取得したいと考えています。

例えば。User::find(1)->status()->description

has_onehas_many、など、さまざまな機能が提供されていますbelongs_toが、どれも機能しません。どうすればこのようなことができるかについて誰かアイデアがありますか?

4

2 に答える 2

3

データベースをセットアップする方法として、1 つのユーザー メソッドを Status モデルに追加します。

STATUS モデルで:

public function user()
{
    return $this->has_one('User');
}

これにより、ユーザーではなくステータスでクエリを実行できます。必要な機能を実装するには、つまりUser::find(1)->status()->description、データベースを次のようにする必要があります

Users

    id
    name

Status

    id
    description
    user_id

ここで、ユーザー モデルに以下を実装します。

public function status()
{
    return $this->has_one('Status');
}

以下を使用できます。

User::find(1)->status()->description;

これにより、Users と Status の間の 1 対 1 の関係が可能になります。1 対多の関係を実装するには、つまり、1 人のユーザーが複数のステータスを持つようにする (おそらく最良の例ではありません) には、上記と同じデータベース セットアップを使用できますが、代わりにユーザー モデルでuser()関数を返すようにします。

$this->has_many('Status');
于 2013-02-10T21:23:56.630 に答える
1

私は答えを見つけました。上記は、ネイティブ リレーションシップを使用する代わりに Fluent クエリを実行することで実行できます。

 public function status() {

    return Status::where('id', '=', $this->status_id)->first();
 }
于 2013-02-10T21:10:12.753 に答える