2016-12-08 5 views
1

私は、1つ以上の関係が指定された状態で読み込まれたが成功しなかったときにデータ構造の構築をどのように管理するかを調べるために、例えばEloquent ORMが熱心な負荷でデータ構造を作成する方法

:そのSQLクエリを実行雄弁どのよう

User has many photos, and a photo belongs to a User 
  1. 複数のSQLを作成しますか?ユーザを取得するクエリ、次に写真を取得するクエリ、または単一のクエリを実行します。

私は多くのオプションを試してみましたので、私は、また、SQLの構造を見て興味を持って、返される結果は、オブジェクトの単なる配列ですので、私は、各フィールドはに属していたものを表に伝えることができる方法は絶対にありません。

+0

、laravelは、2つのクエリを作成します。 1つはユーザを取得するためのもので、 'in(user-ids)'クエリですべての写真を取得します。アプリケーション側でマッピングが行われます。 [source 'with'](https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Model.php#L680)、さらにコールを追跡すると、終了します[ここ](https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Builder.php#L1126)。 'DbQueryLogs'を起動して、それが起動したクエリの数を調べます。 –

+0

@BagusTesaありがとう、あなたのコメントは代わりに答えになると思います –

+0

nah、かろうじてlaravelの魔法を説明するのにかなり長い説明が必要です。誰かが精巧に願ってください。 –

答えて

1

Laravelは熱心な読み込みを使用しようとすると、少なくとも2つのクエリを作成します。例えば

、このコード:

select * from `users` where `users`.`deleted_at` is null 
select * from `photos` where `photos`.`user_id` in ('1', '2', ... '99') 

あなたがより良い方法を、生のSQLを理解したい場合、私は、Laravel Debugbarを使用するためにあなたをお勧めします:

$users = User::with('photos')->get(); 

がこれらに似た2つのクエリを生成しますクエリは次のようになります。

は時々php artisan tinkerツールでtoSql()を使用しても便利です:

現実に
\App\User::where('id', 2)->toSql() 
+0

'>> App \ User :: where( '写真') - > toSql() =>" select * from users where?= "" –

+0

フルSQLを返す –

+0

はい、多くの場合役に立ちます。実際のSQLクエリを取得するには、debugbarを使用します。 –

関連する問題