Laravel 4.1 Eloquent使用"其中"用"用"过滤相关的MySQL表

时间:2014-07-14 05:09:24

标签: php mysql laravel eloquent

尝试使用Eloquent模拟LEFT JOIN并收到错误。基本上,我试图Usersaddresses,但仅限于某种类型。

此代码不起作用,但我认为您将获得要点:

$user = User::with('addresses', 'cards')->where(function($query) {
    $query->where('address.type', '=', 'shipping');
})->find(Auth::user()->id);

如果我离开where它工作正常,但返回的地址多于我需要/想要的地址。

我怎样才能这样做,所以我只能获得类型='运费'?我也想和cards做同样的事情。如果没有送货地址,我仍然需要其他一切。

我试图使用Eloquent vs Fluent / DB(我确实做了工作),但是无法弄明白。

后续行动:根据您拥有的PHP版本,您可能需要执行array(load array)[load array]。 Dev和Prod并不总是一样的。

2 个答案:

答案 0 :(得分:1)

您可以尝试类似

的内容
$user = Auth::user();
$user->load(['cards', 'addresses' => function($q) {
    $q->where('type', 'shipping');
}]);

Eager Loading - Constraints / Lazy Eager Loading

答案 1 :(得分:0)

这种方式会将用户的所有卡片退回给用户,并且只返回类型=' shipping'

的地址
$user = User::with(['cards','addresses'=>function($query){
      $query->where('type','shipping');
    }])->find(Auth::user()->id);
相关问题