sql >> データベース >  >> RDS >> Mysql

教義における多対多の関係

    適切な結合を行うことができないため、これは不可能です。この場合の結合は、parent_entityとchild_entityの値によって異なります(つまり、各行を異なるテーブルに結合する必要がある場合があります)。さらに、ドクトリンはどのレコードタイプをハイドレイトするかをどのように知るのでしょうか(つまり、エンティティタイプに依存しているため)。

    結合でWITH句を使用することで、このようなものを(奇妙になりますが)実行できる場合があります。たとえば、ニュースモデルのsetUp()メソッドでは、次のことができます。

    $this->hasMany('Links as NewsVideoLinks', array('local' => 'id', 'foreign' => 'parent_id'));
    

    リンクモデルの設定:

    $this->hasMany('Videos as videos', array('local' => 'child_id', 'foreign' => 'id'));
    

    リンクモデルで結合のすべての組み合わせを定義する必要があります。つまり、child_idとparent_idの両方を使用して、多くのニュースやアルバムが含まれていることを伝える必要があります。

    そして、クエリでは、次のようなことを行う必要があります。

    $query = Doctrine_Query::create();
    $query->from('News n');
    $query->innerJoin("n.NewsVideoLinks as links WITH parent_entity = 'news'");
    $query->innerJoin("links.Videos as vids WITH child_entity = 'videos'");
    $results = $query->execute();
    

    ご覧のとおり、これは非常に面倒です。リレーションごとに結合テーブルを作成することを強くお勧めします。各結合テーブルに結合することで、探しているものを引き続き取得できます。



    1. 個別のカウント(ID)を選択するか、カウント(個別のID)を選択する

    2. PRIMARY KEYでJOINを使用する場合、どのインデックスを使用する必要がありますか

    3. カウントを使用して発生数を見つける

    4. Codeigniter Active Record HAVING / WHERE db.field =db.field