0

たとえば、中間テーブルを使用してテーブルを結合しようとしてportfolios tablepackages 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 tableintermediary_id

常にこれを行うのは良い習慣ですか?これを改善するには?

ノート

img を必要とする別のテーブルを作成する必要がある場合は、 im を使用intermediary tableして、中間テーブルに列を追加するだけです。table_id

ps: 下手な英語でごめんなさい

4

1 に答える 1