2017-01-03 13 views
1

私は、コントローラのモデル関係の代わりにORMを使ってデータにアクセスするプロジェクトに取り組んでいます(例:hasManyなどを使って適切なモデル関係を確立する代わりに、leftJoinsを使用して、それを通して)Laravel:モデル関係とORM

私の質問は、実際にパフォーマンスと関係がある。モデル関係を使用して、leftJoinsを使用するよりも速くデータにアクセスしますか?私はLaravelが実際にフードの下でleftJoinを実行するかどうかはわかりません。

私はタイトなスケジュールに従っていますので、実際にモデルリレーションシップを使用するコードをリファクタリングする価値があるかどうか、パフォーマンスが向上するかどうかを判断したいと思いますか?

ありがとうございます。

+0

特に、あなたが時間を押されている場合は、私たちがあなたにこのような質問に答えることは本当に難しいです。 Laravel(少なくとも)は結合を使用しないことがあります。しかし、私は1つの簡単なテストケースを構築し、セットアップで実行することをお勧めします。 –

+0

shoieb0101の答えによると、Laravelの関係は結合を実行しません。関連する(子)コンポーネントを取得するために追加のクエリを実行します。場合によっては、関係が意味を成し、時には結合が意味をなさない場合もあります。関係が良いのは、結合されたデータが素早く配列できるためです。結合では、別のテーブルのデータをクエリの結果に追加するだけです。 – devk

答えて

0

Laravel anbd Eloquentは、結合とは対照的に、関係を使用して異なるクエリを実行することがあります。 barryvdh/laravel-debugbarを使用すると、クエリの実行を確認できます。

可能であれば、Laravelは結合の代わりに2つのクエリを使用する傾向があります。それは最初のクエリを実行し、そのクエリから返されたIDを使用して、 "結合された"テーブルの2番目のクエリを "myID in(1,2,3,4,5 ..)"として実行し、結果をステッチします一緒に。

他の人も示唆しているように、クイックテストを構築して、自分の環境で最も効果的なものが最良の賭けとなることを見てください。あなたのコードが何をしているのかを簡単に読むことができるので、できるだけ多くの関係を使うことを好みます。

+0

皆さん、すばらしい洞察に感謝します! モデルの一部を関係に変更し、Datagridパッケージにロードしてコンテンツを表示しました。私のテストに基づいて、Laravelは結合を使用していないようです。親のIDを取得してINクエリを実行して、関連するモデルデータを取得します。 パフォーマンスの向上が見られます(まだ確認できません)。 –

0

ジョインとリレーションシップは互いに反対ではありません。関係は、開発の容易さ、より鮮明で読みやすいコード、容易に維持するためのものです。パフォーマンスの違いは、ある種のデータマイナーを開発していない限り、ほとんど存在しません。

編集済み パフォーマンスに重点を置く場合は、効率的な方法でキャッシュを実装することができます。