php - Laravel 4 急切加载 - 所有关系都被推到第一个返回的对象

标签 php mysql orm laravel eager-loading

好的,所以我正在尝试找出急切加载以提高应用程序性能。我正在开发服务数据库,但遇到了一些问题。这是我的代码

$service_data = Client::join('service_requests','clients.id','=','service_requests.client_id')
    ->join('service_request_comments','service_requests.id','=','service_request_comments.service_request_id')
    ->whereNotNull('service_request_comments.time')->with('service_requests')->with('service_requests.comments')->get();

该查询确实正确提取了数据,但它将所有 service_requests 和 service_requests.comments 加载到第一个 client_object 中,而不是加载带有 service_requests 对象的客户端对象,然后加载带有适当注释的 service_request 对象。

这些关系都是一对多...

...A client can have many service_requests
...A services_request can have many comments
...and by extention...
    ...A client can have many comments

我尝试使用约束,但这只给了我几十个具有不同语法的 500。有人可以告诉我我做错了什么吗?

最佳答案

如果您正在进行急切加载,请不要使用联接。您本质上是将查询生成器命令与 Eloquent 功能相结合,而两者是冲突的。像这样的东西应该得到相同的结果(暂时跳过 where 约束):

$service_data = Client::with('service_requests.comments')->get();

请注意,嵌套的 with() 请求将自动预先加载 service_requests 以及它们的注释。

如果您需要查询评论关系,有几种方法可以做到这一点,并且我不想对您的具体用途做出假设(或者是否有必要),所以我暂时跳过它。

关于php - Laravel 4 急切加载 - 所有关系都被推到第一个返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21946876/

相关文章:

PHP 从应用程序/八位位组流创建图像

c# - MySqlDataReader 为表中的所有行返回相同的值

java - JPA 错误 : duplicate key error when persisting a relationship

sql-server - 使用 CFTRANSACTION 和 ORM EntityLoad 设置隔离级别

php - Laravel.获取一条相关记录

php - 列表框在每个元素下方显示空白行空间

php - CodeIgniter 将 session 变量添加到已定义的 "named session"

php - GET 方法是否比 POST 方法更快?

mysql - Laravel,我如何编写此查询来显示具有来自不同表的字段的记录以及如何更新它们?

mysql - SQL 触发器未执行...做错了什么?