複数の多型親の結合を処理できるクエリを作成しようとしています。Laravel Mysql DBは2つの多型親を結合します
$this->query->join('time_records AS time', function($join) use($taskTable, $projectTable) {
$join->on('time.parent_id', '=', $taskTable . '.id', 'and')
->on('time.parent_type', '=', Task::class, 'and')
->on('time.parent_id', '=', $projectTable . '.id', 'or')
->on('time.parent_type', '=', Project::class, 'and');
});
これは、列名ではなく文字列が好きではないために失敗します。しかし、私はこれがとにかくそう思わないと感じます。
これは、レポートクラス全体の一部です。この場合、多態表time_records
が結合する必要がある2つの表があります。基本的に1つの結合である必要があります。したがって、結合されるすべての時間レコードはtime
という名前の下にあるため、使用される列は全体のクエリの構造に一致します。
ここでは、偽の階層を作成するために、多くのテーブルに参加します。私はコレクションは、グループの名前と自分のアプリケーションを読み取ることができるコレクション階層で終わるダウン、その後グループその下のプロジェクトとは、/理解することができます選択を構築する方法を多少ある
categories.name as lev1, projects.name AS lev2, tasks.name AS lev3, time.time AS time
。
私が探しているのは、プロジェクトまたはタスクの場合に基づいて行のデータを含むtime_records
テーブルへの参照を持つことができる最終結果です(したがって、そのプロジェクトのlev3がnullの場合/ブランク)。私はそれが結合ではないか、それが単なる生のSQLクエリであっても気にしません。私はちょうどコレクションを十分に課税しているので、私はそれを1つのクエリに保持しながら、私が探している結果で終わるために適切な方法の周りに私の頭をラップすることはできません。