Laravel 预先加载:如果关系存在则跳过

Laravel Eager Loading: Skip if relation exists

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

Peter 已经投了三票。他还创造了一次两票的机会。彼得总共有五票。


我想获取所有选票,出于性能原因,这些选票不是场合的一部分。

这将加载所有投票:

$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 table.
  2. 这看起来不会节省性能。

你会怎么解决?

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

尝试

App\User::with('votes')->whereHas('votes',function($query){
   $query->whereNotIn('id',DB::table('occasions_votes')->get()->lists('id')->all());
})

希望对您有所帮助。