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));
});
我的问题
- 没用。这仍然会获取所有选票,即使 id 存在于 occasion_votes table.
- 这看起来不会节省性能。
你会怎么解决?
我应该进行多次查询(获取所有投票 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());
})
希望对您有所帮助。
一个用户可能有很多票和很多场合。 场合 可以包含其中一些 投票。
Peter 已经投了三票。他还创造了一次两票的机会。彼得总共有五票。
我想获取所有选票,出于性能原因,这些选票不是场合的一部分。
这将加载所有投票:
$oUser->load( 'votes' );
这是我到目前为止所做的:
$aLoad = array( 'votes' => function($query) {
$query->whereNotIn('id', json_decode(json_encode(DB::raw('select id from occasions_votes')), true));
});
我的问题
- 没用。这仍然会获取所有选票,即使 id 存在于 occasion_votes table.
- 这看起来不会节省性能。
你会怎么解决?
我应该进行多次查询(获取所有投票 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());
})
希望对您有所帮助。