SQL Join / LeftJoin语句返回Null

时间:2014-08-18 00:27:10

标签: laravel eloquent

我尝试使用此声明加入两个查询:

$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的新手,所以在评价这个问题时请记住这一点。提前谢谢!

1 个答案:

答案 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 (这似乎与模式的其余部分相匹配)。

根据您查询的内容和方式,结果似乎是正确的。