Laravel Eager Loading:如果存在关系则跳过

时间:2016-04-27 17:40:24

标签: laravel laravel-4 eloquent eager-loading

用户可能有多次投票和多次次数场合可以包含其中一些投票

彼得创造了三票。他还创造了两次投票的机会。彼得有五票。

出于性能原因,我想获取所有选票,部分。

这将加载所有投票:

$oUser->load( 'votes' );

这是我到目前为止所做的:

$aLoad = array( 'votes' => function($query) {
   $query->whereNotIn('id', json_decode(json_encode(DB::raw('select id from occasions_votes')), true));
});

我的问题

  1. 不起作用。这仍然会获取所有投票,即使id存在于occasion_votes表中。
  2. 这看起来不会保存性能。
  3. 你会如何解决?

    我应该进行多次查询(获取所有投票ID>删除在occasion_votes中存在的所有投票ID>获取剩余ID的投票数)还是有直接的方式去? (Laravel 4.2)

1 个答案:

答案 0 :(得分:2)

尝试

App\User::with('votes')->whereHas('votes',function($query){
   $query->whereNotIn('id',DB::table('occasions_votes')->get()->lists('id')->all());
})
希望它有所帮助。