10
votes

Ajout de méthodes personnalisées au modèle éloquent à Laravel

J'ai un modèle d'article éloquent dans mon application Laravel 4. Il est vide pour le moment, mais ce que je veux faire est de définir deux méthodes:

  • GetNextArticle Li>
  • GetPreviousArticle LI> ul>

    de sorte que lorsque j'utilise: p> xxx pré>

    Je peux faire un suivi avec: p> xxx pré>

    et P>

    class Article extends Eloquent
    {
        public function getNextArticle()
        {
            // SQL query to get next article from the database
        }
    
        public function getPreviousArticle()
        {
            // SQL query to get previous article from the database
        }
    }
    


0 commentaires

3 Réponses :


0
votes

Je voudrais probablement l'essayer comme ça ... Je ne sais pas si cela fonctionnerait bien que

 class Article extends Eloquent
  {
    public function getNextArticle()
    {
    return Article::find($this->id+1)->get();
    }

    public function getPreviousArticle()
    {
    return Article::find($this->id-1)->get();
    }
  }


2 commentaires

Les identifiants sont rarement parfaitement séquentiels et non nécessaires au représentant de la commande.


J'ai la requête SQL à courir pour les articles suivants et précédents. J'essaie juste de comprendre comment je peux créer les méthodes afin que je puisse la chaîner à $ article-> trouver (1) -> suivant () par exemple.



12
votes
Class Article extends Eloquent {

    public function getNextArticle()
    {
        return Article::where('id', '>', $this->id)->take(1)->get();
    }

    public function getPreviousArticle()
    {
        return Article::where('id', '<', $this->id)->take(1)->get();
    }
}

2 commentaires

Je pense que cette méthode devrait être statique pour le faire fonctionner ou utiliser étendue. , exemple Fonction statique publique GetNextARTICLE ()


@Roll Si vous faites la méthode statique, vous perdez la possibilité d'utiliser $ ceci-> id



3
votes

source laravel http://laravel.com/docs/4.2/eloquant

l'article est redondant, donc je l'ai supprimé. xxx


0 commentaires