我有一个关系,当我使用with("relationship")时,它实际上正确地返回了连接值.问题是我怀疑它是使用一个循环来获取值,所以我想判断生成的SQL.问题是生成的SQL根本不包括连接的表.

json_encode(User::find(1)->materials()->where("id", 1)->with("exerciseRecords")->get()->toArray());

正确给出:

"[{"id":8091,...,"exercise_records":[{"id":28,...,"updated_at":"2023-12-09T01:22:51.000000Z"}]}]"

> User::find(1)->materials()->where("id", 1)->with("exerciseRecords")->toSql();

只是给

"select * from `materials` where `materials`.`user_id` = ? and `materials`.`user_id` is not null and `id` = ?"

这是否意味着我应该使用循环来解释这绝对是does?还是那toSql个不可信?

推荐答案

为了确认Laravel是否正在使用单独的查询,您可以使用数据库查询log,这将返回一个已执行的所有查询的数组,包括用于Eager 加载的关系的查询.您将看到,在最初的获取material 的查询之后,还有另一个查询要获取加载的material 的exerciseRecords.

DB::enableQueryLog();
User::find(1)->materials()->where("id", 1)->with("exerciseRecords")->get();
$queries = DB::getQueryLog();
return $queries;

Mysql相关问答推荐

返回50%的随机结果

SQL条件 Select 和条件WHERE

MySQL没有使用S隐式附加到此二级索引的主键

我需要为用户提供MySQL视图和存储的 routine ,但不是基础表

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

计算符合字段值只能包含一种事件类型这一事实的记录

子查询是否可以按主查询中的列进行分组?

关于设置为 NOT NULL 时的 CHAR 默认值

如何在Mysql中使用With和Values

Mysql,显示谁已经和没有 Select 退出巴士服务

从 mysql RDS 导出数据以导入 questDb

MYSQL除以零警告,奇怪的行为

SQL从具有相同列的行中 Select 最后一行

MYSQL 或 Laravel Eloquent 如何从这个订单中统计细节

SUBSTRING_INDEX 获取第 n 个值

使用 MySQL LIMIT、OFFSET 进行分页

MySQL函数查找两个日期之间的工作日数

索引和多列主键

当运行 UPDATE ... datetime = NOW();所有更新的行都会有相同的日期/时间吗?

MySql 两个时间戳之间的天数差异?