2
votes

Comment obtenir la valeur json dans laravel 5.7?

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 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"]'))


1 commentaires

mettre à jour votre mysql


3 Réponses :


1
votes

5 commentaires

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. '"%' .



0
votes

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);


2 commentaires

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



0
votes

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;
}


0 commentaires