MySQL isn't really build for searching through JSON data. PostgreSQL seems to be way better in this regard. Nether the less it is possible to search since MySQL 5.7.

To do so use the MySQL function JSON_CONTAINS. In our example we have a table called client_data which contains a field called details. Details is a JSON array filled with key and value attributes.

Our query looks like this if we want to search for the key name and value Peter:

$sql = 'SELECT *
FROM client_data
WHERE JSON_CONTAINS(details, \'{"key": "name", "value": "Peter"}\') = 1';

Using a custom type, you can also use JSON_CONTAINS in Doctrine.

doctrine:
  orm:
    dql:
      string_functions:
        json_contains: Syslogic\DoctrineJsonFunctions\Query\AST\Functions\Mysql\JsonContains