3

記事、建物、人物の 3 つのモデルを取得しました。

  1. これらのモデルは、いくつかの方法で相互に参照する必要があります。たとえば、建物は $building->architects()、$building->owners() のように Person のコレクションを参照できる必要があり、記事は $article->authors() で Person のコレクションを参照し、Person はコレクションを参照する可能性があります。 $person->owned_buildings() のような建物の

  2. 各モデルには、混合モデルのコレクションを取得するための「参照」のような関数が必要です。

私はこれが次のようなもので可能であるべきだと考えています:

class Article extends Eloquent {
    public function referenceable()
    {
        return $this->morphTo();
    }

    public function authors()
    {
        return $this->morphMany('Person', 'referenceable');
    }
}

class Building extends Eloquent {
    public function referenceable()
    {
        return $this->morphTo();
    }

    public function architects()
    {
        return $this->morphMany('Person', 'referenceable');
    }
}

class Person extends Eloquent {
    public function referenceable()
    {
        return $this->morphTo();
    }

    public function owned_buildings()
    {
        return $this->morphMany('Building', 'referenceable');
    }
}

問題は、ピボット テーブルがどのように見えるかということです。

4

2 に答える 2

7

ミックスにa を追加することで、リレーションシップbelongsToを使用して a を定義できます。morphMany-stylewhere

  public function followers() {
    return $this
      ->belongsToMany('User', 'follows', 'followable_id', 'user_id')
      ->where('followable_type', '=', 'Thing');
  }

whereEloquent が ID を一致させないことを確認するだけです。

それが役立つことを願っています!

于 2013-07-16T14:50:31.823 に答える
1

ポリモーフィック リレーションシップは、基本的に 1 対多のリレーションシップです。他の多くのモデルでモデルを再利用できます。

たとえば、Post に多くの画像があり、User に多くのアバターがある場合、競合することなく同じ画像モ​​デルを使用できます。したがって、user_id フィールドと post_id フィールドで画像を設定する代わりに、汎用の imageable_id を使用できます。

Eloquent の morphMany() で現在サポートされていない多対多の関係が必要な場合

そのために、いくつかの種類のピボット テーブルを作成できます。たとえば、Building_id フィールドと person_id フィールドを使用して、2 つの建築家/建物と所有者/建物のピボット テーブルを別々に設定します。または、追加の「タイプ」フィールドを使用して単一のピボット テーブルをセットアップして、ロールを定義することもできます

于 2013-04-20T02:10:16.073 に答える