1 回答
TA贡献1842条经验 获得超12个赞
从一些快速测试来看,虽然 Eager Loaded 实际上不区分大小写,但只有在加载和访问时使用相同大小写时才会如此。对于你的例子:
$clients = Client::with(['addresses' => function ($q) {
$q->limit(2);
}])->get();
// Good
foreach ($clients as $client){
foreach ($client->addresses as $address) {
// Should loop twice and output 2 Addresses
}
}
// Bad
foreach ($clients as $client){
foreach ($client->Addresses as $address) {
// Will loop X times for each associated `address`
}
}
使用DB::enableQueryLog()
和DB::getQueryLog()
可以帮助调试。如果您急于加载,您应该看到一行:
"query" => "select * from `addresses` where `addresses`.`client_id` in (...) limit 1
如果在迭代时运行附加查询,您将看到每个客户端的查询:
"query" => "select * from `addresses` where `addresses`.`client_id` = ? and `addresses`.`client_id` is not null",
还有许多其他方法可以对此进行测试,但总而言之,访问$client->addresses
和$client->Addresses
实际上会产生不同的结果,即使它们看起来相似。使用与访问时使用的相同的案例来加载,就可以了。studlyCaps
请注意,由于关系是函数,因此对 PHP 函数(又名)使用正确的大小写pascalCase
应该是您的首选方法。
- 1 回答
- 0 关注
- 84 浏览
添加回答
举报