2016-01-13 153 views
0

我有(或无)用户的帖子,我想用户的顺序由过去后(表明谁从来没有公布用户来决定,然后贴最长的前第一)。Laravel通过二级值排序第1级收集

用户A昨天发布
用户B一周前发布。
用户C从未发布。

用户的顺序应该是C,B,A。

下面的代码是多远我来,但我似乎无法得到它的权利。用户的顺序并不像我期望的那样。有什么想法吗?

UPDATE:
上渴望负荷去除极限()之后,排序的结果是: C,A,B,而不是C,B,A。

$users = User::with('roles', 'flags')->whereHas('subscription', function($x) use($category_id) { 
    $x->where('subscription.category_id', '=', $category_id); 
})->get()->load([ 
    'posts' => function($y) { 
     return $y->orderBy('created_at', 'ASC'); 
    } 
]); 

$users = $users->sortBy(function($user) { 
    if(count($user->posts) == 0) { 
     return 0; 
    } 

    return strtotime($user->posts[0]->created_at); 
}); 

return $users; 
+0

克里斯是你的代码的正确的第一部分的结果吗?你看到了什么顺序,你可以确认你的'created_at'是'Y-m-d'的标准格式。 –

+0

嗨马克,我创建的字段产生以下日期格式:2016-01-13 08:28:57。我看到一些有帖子的用户不会从任何帖子的数据库中拉出来(只有数组中的最后一个用户的帖子不是空的,尽管我确信第一个用户已经有帖子)。 –

+1

@ChrisHessler你的帖子没有被加载,因为的'限制('在渴望加载关系,即'限额()'是不是每个用户,它会热切负载限制为只有一个记录总。 – patricus

回答

0

由于在注释部分@patricus,我最后的(工作)代码:

$users = User::with('roles', 'flags')->whereHas('subscription', function($x) use($category_id) { 
    $x->where('subscription.category_id', '=', $category_id); 
})->get()->load([ 
    'posts' => function($y) { 
     return $y->latest(); 
    } 
]); 

$users = $users->sortBy(function($user) { 
    if(count($user->posts) == 0) { 
     return 0; 
    } 

    return strtotime($user->posts[0]->created_at); 
}); 

return $users;