Tout d'abord excuses pour le titre, je ne pouvais pas penser à une meilleure description. J'ai un contrôleur qui est supposé lire une base de données puis la renvoyer comme un objet. Cette base de données a récemment traversé un changement de structure et je l'ai repoussé. Mon code de contrôleur est le suivant:
class book extends Model { protected $primaryKey = 'bookId'; protected $fillable = [ 'bookId', 'userId', 'authorId', 'title', 'isbn', 'description', 'preview', 'cover', 'book_status' ]; //$guarded = []; public function authors(){ return $this->belongsTo('App\author','authorId'); } }
3 Réponses :
Pour obtenir un seul résultat, vous aurez besoin de la méthode Donc, votre code dans Tinker sera comme: P> Ce wil renvoie uniquement les résultats des sapins code> de Laravel. Ce que c'est, c'est que cela prend le disque des sapin et vous le montre. Cette méthode ne va pas itérer (boucle) via votre ensemble de résultats.
$ Books = \ app \ Book :: Où ('userid' , 1) -> premier () -> bookide; code> p>
bookid code>. P>
obtenir () code> La méthode est utilisée pour chercher des collections. Les collections sortent comme des tableaux. C'est pourquoi vous obtenez plusieurs magasins de données. Tous vos champs de la table seront affichés et toutes vos données seront affichées (en fonction des options que vous donnez comme
où ('userID', 1) code>). Qui s'appelle une collection. Et à itérer ou à bouffer à travers une collection, vous devrez utiliser la boucle de foresach comme vous l'avez fait dans votre question. P>
foreach ($books as $b) {
echo "<li>" .$b->bookId. "<li>";
}
Je suis allé de l'avant et j'ai ajouté le modèle ainsi que la structure de la DB. Je n'ai qu'un seul modèle, c'était une erreur de ma part, mais ne change aucun de mes problèmes.
Voulez-vous seulement obtenir le bookid?
Veuillez vérifier la réponse mise à jour. J'espère que c'était ce que tu cherchais
Dans votre contrôleur, vous avez une boucle sur le jeu de résultats et faisons écho au bookid code> pour un seul modèle dans la boucle. Et dans Tinker, vous récupérez les résultats et le bricoleur génère la collection à la console. Faire cela dans Tinker devrait résulter de la même sortie que votre contrôleur: à nouveau, dans Tinker, vous récupérez le jeu de résultats, pas un seul enregistrement et beaucoup de données supplémentaires, telles que le modèle. Les détails et ainsi de suite, seront imprimés dans la console. J'espère que cette explication aide. P> En outre, vous devez corriger la typographie de votre contrôleur. Je suppose que votre nom de modèle est book code>, pas
book code> afin que vous deviez utiliser le nom de capital du modèle. P> p>
Merci à tous pour votre aide. Cependant, j'étais complètement hors base. Le problème est dans mon modèle. Quand je l'ai changé, je voulais changer la clé primaire pour être "Enregistrement", mais l'a laissé comme «bookid».
Il semblerait que Laravel lira cette clé primaire comme un entier. Donc, quand je dirais le code, cela verrait un bookid et pensez qu'il était primaire, puis la convertissez-la en un entier. Donc, en réalité, ce qui se passait était ceci:
$books = \App\book::where('userId',1)->get(); foreach ($books as $b) { //$b->bookid = '7iraCwAAQBAJ' echo intval($b->bookId); //intval($b->bookId) = 7 }
Avez-vous essayé d'effacer votre cache?