Dans mon application, j'ai des jeux et des tournois, avec un jeu qui appartient éventuellement à un tournoi. Le jeu et le tournoi peuvent avoir une relation d'appartenance avec une photoalbum.
Ce que je veux maintenant, c'est si un jeu n'a pas de photoalbum, il essaiera de retourner la photoalbum du tournoi (si ces deux choses existent). Je veux aussi que cela prenne cet itinéraire si je fais une requête en utilisant J'ai essayé d'ajouter les chèques dans la relation d'album du jeu, mais cela ne semblait pas fonctionner: < / p> - p> moins préoccupé par le withcount code>. P>
doit fonctionner avec sans encombrement () code> dans le constructeur de requêtes frappe>, et ne me traduisez pas pour écrire un tout tas de nouveau si / puis vérifie tout au long du code existant. p>
sans fonctionnement car je peux faire une propriété personnalisée qui Fonctionne sur
album_count code>. p> p>
3 Réponses :
Vous pouvez faire comme ceci ci-dessous
$game = Game::find(1); if(! isset($game->album)) { // you can different if's here to check if not album exist return $game->tournament->album; }
Ne fonctionne pas avec la requête withcount code>, et je ne veux pas écrire 50 si des déclarations tout au long de mon application
Avez-vous essayé un hasonethrough code> relation?
public function tournamentAlbum(): HasOneThrough
{
return $this->hasOneThrough(Album::class, Tournament::class);
}
J'ai effectivement oublié Hasonethrough existait, mais oui, pas de chance ici en raison de charges impatientes
Je déteste être ce gars qui répond à sa propre question, mais je déteste être le gars qui ne partage pas ce qui a fonctionné plus.
J'ai fini par créer une vue qui fait la jointure et vérifiez au niveau des données. . Cela a fait cela un simple Étant donné que cette vue n'est pas mise à jour, j'ai fini par appuyer sur le système d'événements de modèles pour changer le modèle à la table de base lors de la préparation à Faites des écrires puis de retour quand c'est fait. Je suis allé avec le modèle d'observateur car il garde tout ce qui est bien et propre. P> L'observateur: p> le contrat / interface IPERSISTTO P> rejoindre code> et un
ifnull code>, puis changeez mon modèle pour utiliser cette table au lieu de la base. Cela fonctionne de manière à lire et à interroger, mais évidemment pas pour les opérations de crud. P>
Game::Observe(PersistToObserver::class);
Liée à: Stackoverflow.com/a/35445603/3047297
C'est si frustrant, mais cette deuxième requête ne ferait pas capter ce que je devrais pouvoir correspondre correctement!