2016-01-13 69 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;