JSON_CONTAINS_PATH podmínka nefunguje

crassus
Backer | 78
+
0
-

Dobrý den,

když zkouším zapsat where podmínku v následujícím dotazu:

foreach($this->db->table('benefit')->where('JSON_CONTAINS_PATH(json, "one", "$.text_content.cs")') as $benefit)
{
	...
}

Tak dostávám error:

Nette\InvalidArgumentException
No reference found for $benefit->text_content.

Dá se ta where podmínka zapsat pomocí Database Explorer nebo je to pro json úplně marné?

Děkuji

Editoval crassus (16. 3. 2020 0:48)

David Matějka
Moderator | 6445
+
0
-

retezce davej pres parametry:

->where('JSON_CONTAINS_PATH(json, ?, ?)', "one", "$.text_content.cs")
crassus
Backer | 78
+
0
-

David Matějka napsal(a):

retezce davej pres parametry:

->where('JSON_CONTAINS_PATH(json, ?, ?)', "one", "$.text_content.cs")

Super díky funguje to!

Můžu nějak přes parametr poslat i boolean, aby mi to ve výsledném SQL dotazu neudělalo integer?

Tzn. z tohodle:

->where('json->"$.active"', true)

Abych dostal tohle SQL:

SELECT `id`, `json`
FROM `benefit`
WHERE (`json`->"$.active" = true)

Nikoliv toto:

SELECT `id`, `json`
FROM `benefit`
WHERE (`json`->"$.active" = 1)
David Matějka
Moderator | 6445
+
+1
-

a ten kod s 1 nefunguje? v mysql by to imho melo byt ekvivalentni

edit: vlastne u json mozna ne..
zkus

->('json->? = ?', "$.active", new Nette\Database\SqlLiteral('true'))
crassus
Backer | 78
+
0
-

David Matějka napsal(a):

a ten kod s 1 nefunguje? v mysql by to imho melo byt ekvivalentni

edit: vlastne u json mozna ne..
zkus

->('json->? = ?', "$.active", new Nette\Database\SqlLiteral('true'))

Perfektní díky moc :)