5

I have table item which has a JSON column sku_purchase_price. There are some rows like that:

enter image description here

I tried to retrieve those rows from DB by Eloquent:

$items = Item::where('sku_purchase_price', '[]')->get();

but it returns a collection with zero results.

So, how to retrieve those row from DB by Eloquent?

1
  • you can convert the data in 'sku_purchase_price' to strings so you retrieve strings, but why do you have [] in the rows Commented Aug 2, 2017 at 2:15

2 Answers 2

9

You can use Illuminate\Database\Query\Builder::whereJsonLength like this:

$items = Item::whereJsonLength('sku_purchase_price', 0)->get();

This works only with MySQL 5.7, PostgreSQL, SQL Server 2016, and SQLite 3.9.0 (with the JSON1 extension).

Sign up to request clarification or add additional context in comments.

Comments

3

Um there is something not quite right in your code base earlier on if it's inserting empty arrays.

You need to find the code that is inserting into this table and check if there is an empty array being created and if there is, pass through an empty string or nothing if it's not a required field.

However if you want to select them using Eloquent you would do:

$items = Item::where('sku_purchase_price', '\[\]')->get();

But yes, don't do this, find the actual problem in your code first rather than trying to select empty arrays from the db...

2 Comments

what should i do if i need to get empty downloads data only? $patternsRelated->whereRaw('download != "" AND download != "[]"')->orderBy($sortby)->get();
i am using the code mention in above comment but still i am getting empty download data.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.