我尝试使用此声明加入两个查询:
$item = Category::where('type', $item)
->leftJoin('inventory', 'inventory.id', '=', 'categories.id')
->get();
return View::make('general.buy')
->with('items', $item);
这是我的观点(这会返回NULL):
@foreach ($items as $item)
{{ $item->id }}
@endforeach
问题是如果没有库存ID值等于类别ID字段,查询会将id返回为NULL。
有谁知道为什么会这样,我怎么解决?我还应该提一下,我是laravel的新手,所以在评价这个问题时请记住这一点。提前谢谢!
答案 0 :(得分:0)
我想你回答了自己的问题。它更多的是关于LEFT JOIN的含义。您有两个表,库存和类别是否正确?根据你的查询(或至少我能说的),这将生成SQL simliar到
SELECT FROM category LEFT JOIN inventory on inventory.id = categories.id
这就是说,从类别中选择所有行,如果它们在库存中匹配,则在查询的列(inventory.id)中填充然后提供该值,否则在该列中返回null。
鉴于这对您来说似乎有点意外的结果,我无法提醒,但注意到命名惯例似乎略有不同(但我并不熟悉laravel)。我假设您不会合并categories.id而是合并 category.id (这似乎与模式的其余部分相匹配)。
根据您查询的内容和方式,结果似乎是正确的。