Sort collecttion by date DESC using Laravel and Collection












0















I have a collection where I am ordering the "total" value in a descending way. When the "total" values are the same, I must order the items by descending date.



$collection->sortByDesc('total');


To sort the elements by descending date when the totals are equal, I have used sort and sortByDesc but the elements are still not sorted.



//First method
$collection->sortByDesc('created_at')->sortByDesc('total');

//Second method
$collection->->sort(function($a, $b){
if($a->total === $b->total)
{
return strtotime($a->created_at) - strtotime($b->created_at);
}
})->sortByDesc('total');


Neither option works for me and I still have the same result:



enter image description here



When the result should be the following (items ordered by descent date when the total values are equal):



enter image description here



What am I doing wrong? Cheerz.



PS: It does not help me to sort by "total" and then by "date" since the "total" value is the one that should be a priority.










share|improve this question


















  • 1





    Try this: github.com/laravel/ideas/issues/11#issuecomment-398873250

    – Jonas Staudenmeir
    Nov 24 '18 at 18:05











  • Is your date a string/integer or a Carbon/DateTime object?

    – Namoshek
    Nov 24 '18 at 18:23











  • @Namoshek is a Carbon instance

    – Cristian Meza
    Nov 24 '18 at 18:46
















0















I have a collection where I am ordering the "total" value in a descending way. When the "total" values are the same, I must order the items by descending date.



$collection->sortByDesc('total');


To sort the elements by descending date when the totals are equal, I have used sort and sortByDesc but the elements are still not sorted.



//First method
$collection->sortByDesc('created_at')->sortByDesc('total');

//Second method
$collection->->sort(function($a, $b){
if($a->total === $b->total)
{
return strtotime($a->created_at) - strtotime($b->created_at);
}
})->sortByDesc('total');


Neither option works for me and I still have the same result:



enter image description here



When the result should be the following (items ordered by descent date when the total values are equal):



enter image description here



What am I doing wrong? Cheerz.



PS: It does not help me to sort by "total" and then by "date" since the "total" value is the one that should be a priority.










share|improve this question


















  • 1





    Try this: github.com/laravel/ideas/issues/11#issuecomment-398873250

    – Jonas Staudenmeir
    Nov 24 '18 at 18:05











  • Is your date a string/integer or a Carbon/DateTime object?

    – Namoshek
    Nov 24 '18 at 18:23











  • @Namoshek is a Carbon instance

    – Cristian Meza
    Nov 24 '18 at 18:46














0












0








0








I have a collection where I am ordering the "total" value in a descending way. When the "total" values are the same, I must order the items by descending date.



$collection->sortByDesc('total');


To sort the elements by descending date when the totals are equal, I have used sort and sortByDesc but the elements are still not sorted.



//First method
$collection->sortByDesc('created_at')->sortByDesc('total');

//Second method
$collection->->sort(function($a, $b){
if($a->total === $b->total)
{
return strtotime($a->created_at) - strtotime($b->created_at);
}
})->sortByDesc('total');


Neither option works for me and I still have the same result:



enter image description here



When the result should be the following (items ordered by descent date when the total values are equal):



enter image description here



What am I doing wrong? Cheerz.



PS: It does not help me to sort by "total" and then by "date" since the "total" value is the one that should be a priority.










share|improve this question














I have a collection where I am ordering the "total" value in a descending way. When the "total" values are the same, I must order the items by descending date.



$collection->sortByDesc('total');


To sort the elements by descending date when the totals are equal, I have used sort and sortByDesc but the elements are still not sorted.



//First method
$collection->sortByDesc('created_at')->sortByDesc('total');

//Second method
$collection->->sort(function($a, $b){
if($a->total === $b->total)
{
return strtotime($a->created_at) - strtotime($b->created_at);
}
})->sortByDesc('total');


Neither option works for me and I still have the same result:



enter image description here



When the result should be the following (items ordered by descent date when the total values are equal):



enter image description here



What am I doing wrong? Cheerz.



PS: It does not help me to sort by "total" and then by "date" since the "total" value is the one that should be a priority.







arrays laravel sorting collections






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 24 '18 at 17:38









Cristian MezaCristian Meza

14218




14218








  • 1





    Try this: github.com/laravel/ideas/issues/11#issuecomment-398873250

    – Jonas Staudenmeir
    Nov 24 '18 at 18:05











  • Is your date a string/integer or a Carbon/DateTime object?

    – Namoshek
    Nov 24 '18 at 18:23











  • @Namoshek is a Carbon instance

    – Cristian Meza
    Nov 24 '18 at 18:46














  • 1





    Try this: github.com/laravel/ideas/issues/11#issuecomment-398873250

    – Jonas Staudenmeir
    Nov 24 '18 at 18:05











  • Is your date a string/integer or a Carbon/DateTime object?

    – Namoshek
    Nov 24 '18 at 18:23











  • @Namoshek is a Carbon instance

    – Cristian Meza
    Nov 24 '18 at 18:46








1




1





Try this: github.com/laravel/ideas/issues/11#issuecomment-398873250

– Jonas Staudenmeir
Nov 24 '18 at 18:05





Try this: github.com/laravel/ideas/issues/11#issuecomment-398873250

– Jonas Staudenmeir
Nov 24 '18 at 18:05













Is your date a string/integer or a Carbon/DateTime object?

– Namoshek
Nov 24 '18 at 18:23





Is your date a string/integer or a Carbon/DateTime object?

– Namoshek
Nov 24 '18 at 18:23













@Namoshek is a Carbon instance

– Cristian Meza
Nov 24 '18 at 18:46





@Namoshek is a Carbon instance

– Cristian Meza
Nov 24 '18 at 18:46












1 Answer
1






active

oldest

votes


















1














sortByDesc will override the sorting you've done in your sort function.



Also, strtotime($a->created_at) - strtotime($b->created_at) will order the dates in ascending order not descending order.



The following should give you what you're after:



$collection->sort(function ($a, $b) {
if ($a->total === $b->total) {
return strtotime($a->created_at) < strtotime($b->created_at);
}

return $a->total < $b->total;
});


Lastly, assuming that created_at and updated_at are Carbon instances you shouldn't need to use strtotime:



$a->created_at < $b->created_at





share|improve this answer
























  • Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

    – Cristian Meza
    Nov 24 '18 at 18:45











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460775%2fsort-collecttion-by-date-desc-using-laravel-and-collection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














sortByDesc will override the sorting you've done in your sort function.



Also, strtotime($a->created_at) - strtotime($b->created_at) will order the dates in ascending order not descending order.



The following should give you what you're after:



$collection->sort(function ($a, $b) {
if ($a->total === $b->total) {
return strtotime($a->created_at) < strtotime($b->created_at);
}

return $a->total < $b->total;
});


Lastly, assuming that created_at and updated_at are Carbon instances you shouldn't need to use strtotime:



$a->created_at < $b->created_at





share|improve this answer
























  • Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

    – Cristian Meza
    Nov 24 '18 at 18:45
















1














sortByDesc will override the sorting you've done in your sort function.



Also, strtotime($a->created_at) - strtotime($b->created_at) will order the dates in ascending order not descending order.



The following should give you what you're after:



$collection->sort(function ($a, $b) {
if ($a->total === $b->total) {
return strtotime($a->created_at) < strtotime($b->created_at);
}

return $a->total < $b->total;
});


Lastly, assuming that created_at and updated_at are Carbon instances you shouldn't need to use strtotime:



$a->created_at < $b->created_at





share|improve this answer
























  • Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

    – Cristian Meza
    Nov 24 '18 at 18:45














1












1








1







sortByDesc will override the sorting you've done in your sort function.



Also, strtotime($a->created_at) - strtotime($b->created_at) will order the dates in ascending order not descending order.



The following should give you what you're after:



$collection->sort(function ($a, $b) {
if ($a->total === $b->total) {
return strtotime($a->created_at) < strtotime($b->created_at);
}

return $a->total < $b->total;
});


Lastly, assuming that created_at and updated_at are Carbon instances you shouldn't need to use strtotime:



$a->created_at < $b->created_at





share|improve this answer













sortByDesc will override the sorting you've done in your sort function.



Also, strtotime($a->created_at) - strtotime($b->created_at) will order the dates in ascending order not descending order.



The following should give you what you're after:



$collection->sort(function ($a, $b) {
if ($a->total === $b->total) {
return strtotime($a->created_at) < strtotime($b->created_at);
}

return $a->total < $b->total;
});


Lastly, assuming that created_at and updated_at are Carbon instances you shouldn't need to use strtotime:



$a->created_at < $b->created_at






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 24 '18 at 18:27









Ross WilsonRoss Wilson

16k22639




16k22639













  • Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

    – Cristian Meza
    Nov 24 '18 at 18:45



















  • Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

    – Cristian Meza
    Nov 24 '18 at 18:45

















Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

– Cristian Meza
Nov 24 '18 at 18:45





Thanks for the help friend, now if it works with both order criteria. Greetings and thanks again.

– Cristian Meza
Nov 24 '18 at 18:45


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53460775%2fsort-collecttion-by-date-desc-using-laravel-and-collection%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

Calculate evaluation metrics using cross_val_predict sklearn

Insert data from modal to MySQL (multiple modal on website)