web-dev-qa-db-fra.com

Laravel. Obtenir les valeurs de colonne unique d'une table à l'aide de Query Builder

J'ai une table nommée "items" et une entrée pour la condition where nommée "ref_code". 

$items = DB::table('items')
             ->where('ref_code','=', $request->ref_code)
             ->get(['id', 'ref_code', 'name','price']);

Mais je n'arrive pas à prendre les valeurs de chaque colonne.

J'ai vérifié si le constructeur de requêtes fonctionnait ou non en utilisant:

return $items;

Heureusement, il n'y a pas de problème.

Mais retourner ou obtenir une valeur unique ne fonctionne pas avec:

return $items->id

Est-ce que ma syntaxe est fausse? Tout cela se trouve dans mon contrôleur.

EDIT: j'ai essayé

dd($items);

avant de revenir et cela m'a montré ceci:

  Collection {#325 ▼
  #items: array:1 [▼
    0 => {#322 ▶}
  ]
}
3
Jan Ariel San Jose

Merci d'avoir mis à jour votre question avec le résultat. Regardez votre résultat de débogage. ça ressemble à 

array:1 [▼
    0 => {#322 ▶}
  ]

Cela signifie que votre requête renvoie une collection de tableaux à cause de votre méthode get(). Ainsi, la méthode get() renvoie toujours une collection d'un tableau. 

Pour éviter ce problème, vous devez utiliser la méthode first() au lieu de get(). Rappelez-vous : à tout moment, vous devez utiliser la méthode first () lorsque vous souhaitez obtenir une seule ligne. 

Votre requête devrait donc ressembler à: 

$items = DB::table('items')
             ->select('id', 'ref_code', 'name', 'price')
             ->where('ref_code','=', $request->ref_code)
             ->first();

Ou 

$item = YourModelName::select('id', 'ref_code', 'name', 'price')
             ->where('ref_code','=', $request->ref_code)
             ->first();

Et enfin, obtenir la sortie comme $ Item-> id, $ item-> code_réf, etc. 

J'espère que ça va aider. 

Références: https://laravel.com/docs/5.4/queries#retrieving-results

3
Sumon Mahmud

get() retournerait une collection

$items = DB::table('items')
         ->where('ref_code','=', $request->ref_code)
         ->get(['id', 'ref_code', 'name','price']);

Dans le cas ci-dessus, $items serait une collection, vous devez donc parcourir la collection pour accéder aux propriétés.

foreach ($items as $item) {
    $item->price;
}

Si vous devez renvoyer une instance de modèle, vous pouvez utiliser la méthode first() à la place.

$items = DB::table('items')
             ->select('id', 'ref_code', 'name', 'price')
             ->where('ref_code','=', $request->ref_code)
             ->first();

et accéder aux propriétés 

$items->price;
1
linktoahref

Essayez ceci en utilisant le modèle

$result =  Model_name::->where('ref_code','=', $request->ref_code)
                       ->first(['id', 'ref_code', 'name', 'price']);
0
sanjiv pandey