J'ai 3 modèles dans mon application Laravel : Films, utilisateurs, commentaires
Commentaires :
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Review extends Model { use HasFactory; protected $hidden = ['user_id','movie_id','created_at','updated_at']; public function movie(){ return $this->belongsTo(Movie::class); } public function user(){ return $this->belongsTo(User::class); } }
Films :
<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Movie extends Model { use HasFactory; protected $hidden = ['created_at','updated_at']; public function review(){ return $this->hasMany(review::class); } public function getAvg() { return $this->review()->average('rating'); } public function count() { return $this->review()->count(); } public function getBestRating() { return $this->review()->max('rating'); } public function getWorstRating() { return $this->review()->min('rating'); } }
Utilisateur :
<?php namespace AppModels; // use IlluminateContractsAuthMust VerifyEmail; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateFoundationAuthUser as Authenticatable; use IlluminateNotificationsNotifiable; use LaravelSanctumHasApiTokens; use TymonJWTAuthContractsJWTSubject; class User extends Authenticatable implements JWTSubject { use HasApiTokens, HasFactory, Notifiable; public function review() { return $this->hasMany(Review::class); } }
Requête invalide
$movies = Movie::has('review')->with('review.user')->get();
Dans localhost, cela fonctionne bien. Mais après le déploiement dans digitalOcean, il renvoie "Class "AppModelsreview" introuvable"
J'ai essayé la console sur digitalOcean :
> Movie::has('review')->get() [!] Aliasing 'Movie' to 'AppModelsMovie' for this Tinker session. ERROR Class "AppModelsreview" not found in vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/HasRelationships.php on line 775.
Mais après avoir exécuté cette commande dans la même session :
Review::all()
Le film précédent ::has('review') a bien fonctionné.
Pourquoi est-ce ? Ai-je manqué quelque chose?
Vous chargez probablement la classe à partir d'un système de fichiers sensible à la casse, c'est pourquoi ce problème est à l'origine du problème. Bien que les noms de classes PHP ne soient pas sensibles à la casse. Tel qu'ils apparaissent dans la déclaration, cela est considéré comme une bonne pratique
Vous devez modifier cette ligne :
à