Eloquent ORM如何在急切加载时创建其数据结构

时间:2016-12-08 06:52:33

标签: laravel orm eloquent

我一直在研究雄辩的源代码,看看它是如何管理构建其数据结构的时候,只是指定了一个或多个指定的关系,但我还没有成功。

例如:

User has many photos, and a photo belongs to a User
  1. eloquent如何执行SQL查询?
  2. 是否会生成多个SQL?一个查询,以获取用户,然后另一个用于获取他/她的照片,或者执行单个查询。
  3. 我也有兴趣看到SQL的结构,因为我已经尝试了很多选项,并且绝对没有办法告诉每个字段属于哪些表,因为返回的结果只是普通的对象数组。

1 个答案:

答案 0 :(得分:1)

当您尝试使用预先加载时,Laravel将至少创建两个查询。

例如,此代码:

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

将生成两个类似的查询:

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

如果您想更好地了解原始SQL查询的外观,我建议您使用Laravel Debugbar

有时在toSql()工具中使用php artisan tinker也很有帮助:

\App\User::where('id', 2)->toSql()