たとえば、中間テーブルを使用してテーブルを結合しようとしてportfolios table
いpackages table
ます。テーブルの各行には、に格納されている多くの imgs がありimgs table
ます。それらを結合する中間テーブルを作成して、imgs table
列が 2 つだけになるようにします。詳細は次のとおりです。
ポートフォリオ表
portfolio_id
portfolio_name
description
パッケージ表
package_id
package_name
price
imgs テーブル
img_id
img_name
intermediary_imgs テーブル
img_id
intermediary_id
portfolio_id
package_id
img がポートフォリオ専用の場合intermediary_imgs table
、列のpackage_id
値は 0 になります。
Fluent Query Builder を使用してこれを達成しました:
DB::table('portfolios')
->select('portfolios.portfolio_id', 'portfolios.portfolio_name', 'imgs.img_id', 'imgs.img_name','imgs.intermediary_id')
->join('intermediary_imgs', 'portfolios.portfolio_id', '=', 'imgs_pivot.portfolio_id')
->join('imgs', 'intermediary_imgs.intermediary_id', '=', 'imgs.intermediary_id')
->where('portfolios.portfolio_id', '=', $id)
->get();
それから私はEloquentでそれをやろうとしましたが、うまくいきませんでした.
//i already specify the relationship in the each model(Portfolio, Packages, Intermediary, Img)
Portfolios::with('imgsIntermediary')->get()
次に、特定のポートフォリオ ID を参照するすべての intermediary_table データを返します
しかし、適合するものimgs
から選択するには、別のクエリを実行する必要がありますimgs table
intermediary_id
常にこれを行うのは良い習慣ですか?これを改善するには?
ノート
img を必要とする別のテーブルを作成する必要がある場合は、 im を使用intermediary table
して、中間テーブルに列を追加するだけです。table_id
ps: 下手な英語でごめんなさい