samedi 24 avril 2021

laravel orm : sort by id but put 0 values of another column at the end

I have a Products table

products: id, title, stock, price

I want new products to be at top of the list (first page), but I also want products with 0 stock to be at the end of the list (last page)

obviously, this doesn't work the way I want it, a new product with 0 stock still will show up first

Product::orderBy('id' , 'desc')->orderBy('stock' , 'desc')->paginate(20)

there are lots of similar questions but all seem to be about null values which don't work for me .. also I tried

->orderByRaw('stock = 0', 'ASC', 'id' , 'desc' )->paginate(20)

as was suggested but I get an empty collection

it's a pagination query, sort has to happen in the database, and sorting the collection after reading them from DB won't work

------------------------------------ EDIT ------------------------------------

i tried this code

Product::orderByRaw('stock = 0', 'ASC')
            ->orderBy('id' , 'desc')
            ->get()

which will generate this query in debugger

select * from `products` order by stat_view = 0, `id` desc

this code will work when i try it directly in database , but for some reason in laravel i get an empty collection .... this is an old website which is using laravel 5.2 not sure if that has anything to do with the problem

enter image description here



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire