我对Eloquent急切加载没有任何问题,直到这两个模型突然出现。在我的控制器中:
$items = OrderLineItem::where('QuantityNeeded', '>', 0)->with('SkuDetails')->get();
我的OrderLineItem
型号:
class OrderLineItem extends Model {
public function SkuDetails() {
return $this->hasOne(Inventory::class, 'LocalSKU', 'SKU');
}
}
我的Inventory
型号:
class Inventory extends Model
{
public function OrderLineItems() {
return $this->belongsToMany(OrderLineItem::class, 'SKU', 'LocalSKU');
}
}
但我的$items
似乎并不急于加载SkuDetails
。我打开了查询日志,它实际上是触发两个SQL语句来加载数据。
我看到select * from [OrderLineItems] where [QuantityNeeded] > ?
和select * from [Inventory] where [Inventory].[LocalSKU] in ?
所以数据是从SQL中提取的,但是这些模型没有匹配。如果我检查$items
集合,则对象上没有SkuDetails
。另外,我最终会调用类似$skus->first()->SkuDetails
的内容。我在查询日志(select top 1 * from [Inventory] where [Inventory].[LocalSKU] = ? and [Inventory].[LocalSKU] is not null
)中看到了一个新的SQL语句,它也告诉我它并不急于加载。