J'ai deux tables dans une base de données, package
et categories
.
package
a un champ category_id code > qui contient des données sous cette forme
["1", "11"]
et affiche les données de catégories
sous la forme d'une case à cocher.
Maintenant, je veux toutes les données du package
où category_id
est égal à categories
id
.
Voici mon code:
public function archive_packages(Request $request, $slug){ $title='Archive Packages'; $para=''; $slugs='archive-packages'; $categoryRow = Category::where('slug',$slug)->first(); $categoryID = $categoryRow->id; $package = Packages::whereRaw('JSON_CONTAINS(category_id, \'["11"]\')')->get(); dd($package); return view('pages.archive-packages',compact('title','para','slugs','package')); }
J'obtiens l'erreur suivante:
SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1305 FUNCTION
pre.JSON_CONTAINS n'existe pas (SQL: sélectionnez * à partir de `packages` où
JSON_CONTAINS (id_catégorie, '["11"]'))
3 Réponses :
Il existe une méthode laravel pour ce faire, plus de détails ici a > Veuillez donc essayer: Si votre version mysql ne prend pas en charge Packages::where('category_id', 'like', '%"11"%');
json_contains
et que vous ne pouvez pas la mettre à jour, alors essayez cette requête: Packages::whereJsonContains('category_id', '11')->get();
J'ai un tableau d'identifiants stockés en tant que json, j'ai essayé cela moi-même et cela a fonctionné. N'oubliez pas les guillemets car sans eux cela ne fonctionne pas, donc 11 ne fonctionnera pas mais «11» fonctionnera. Sinon, dites-moi ce que vous obtenez et je peux essayer de vous aider.
(2/2) QueryException SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1305 FUNCTION pre.json_contains n'existe pas (SQL: sélectionnez * parmi packages
où json_contains ( category_id
, "11"))
Veuillez vérifier si la version de mysql que vous utilisez la fonction json_contains
existe. Ou essayez mon code modifié.
gentiment guidé plus si nous remplaçons 11 par une variable comme $ categoryID qui contient un nombre comme 11, 1, 5, etc.
Je vous suggère de mettre à jour votre version de mysql, car like
renverra des résultats même si l'un des ID de catégorie
existe dans le tableau. Je ne sais pas si c'est votre intention. Et pour passer une variable, remplacez '% "11"%'
par '% "'. $ CategoryID. '"%'
.
PHP a une méthode intégrée json_encode () pour encoder facilement des tableaux au format de chaîne JSON. Nous pouvons l'implémenter comme: ceci que nous pouvons également utiliser dans laravel
$ array = array ('ordinateur portable', 'écouteurs', 'souris'); return json_encode ($ array);
Cependant, les nouvelles versions de Laravel ont également sa propre méthode json () qui définit automatiquement le Content-Type pertinent et encode les données JSON:
$ array = array ('ordinateur portable', 'écouteurs', 'souris'); return response () -> json ($ array);
Votre réponse n'a aucun rapport avec la question.
Ouais, je ne suis pas la description, sur le résumé de la question a donné une réponse, merci
Exemple JSON:
[ { "id": 11, "first_name": "Anthony", "last_name": "Ross", "Langue: français", "note": 1 } ]
Si vous avez plusieurs valeurs dans json, vous pouvez essayer une boucle comme,
$target = Var::where('first_name', '=', $request->input('jsonArr'))->first(); return $jsonArr->id
Si vous n'avez qu'un seul enregistrement, essayez, p >
foreach($target as $target_result){ echo $target_result->id; }
mettre à jour votre mysql