web-dev-qa-db-fra.com

laravel: la fonction dans le modèle doit renvoyer une instance de relation

J'essaie de construire un chemin pour un modèle sur laravel

J'ai créé une fonction dans mon modèle:

public function path()
{
    return App\Helper\GeneralController::getURL($this);
}

avec dd(App\Helper\GeneralController::getURL($this)) test, j'ai eu la bonne réponse. (la sortie est une URL)

mais en vue avec l'appel: $article->path j'obtiens cette erreur:

App\Article:: path must return a relationship instance.

Qu'est-ce qui ne va pas?

14
Ali

Vous devez l'appeler:

$article->path()

Lorsque vous utilisez $article->path, vous essayez d'utiliser une relation Eloquent que vous n'avez pas encore.

32
Alexey Mezenin

path() est une méthode, pas un objet, vous devez appeler cette méthode.

$article->path();
3
Niklesh Raut

Vous appelez une relation.

$article->path

Pour appeler la méthode, utilisez '()', comme ça,

$article->path()
2
jynk

J'ai fait face à cette erreur quand j'ai oublié d'écrire return avant la relation dans le modèle!
regardez-le maintenant!

1
Ali

Je sais que cela a déjà été répondu et accepté. Toutefois, si l'OP souhaite utiliser un accesseur de propriété plutôt qu'une méthode, utilisez la syntaxe "get {nom de la propriété}" de Laravel pour créer un attribut personnalisé.

Voici à quoi cela ressemblerait pour ce cas particulier:

public function getPathAttribute()
{
    return App\Helper\GeneralController::getURL($this);
}
1
pwyg