2013-06-28 40 views
9

我在Laravel 4應用程序中有一個Eloquent Article模型。這是空的時刻,但我想要做的就是定義了兩個方法:在Laravel中將自定義方法添加到Eloquent Model

  • getNextArticle
  • getPreviousArticle

所以,當我使用:

$article = Article::find(1); 

我可以按照up with:

$article->getNextArticle; 

$article->getPreviousArticle; 

我需要獲得()的文章模型中從發現返回的結果,所以我可以利用這些數據來從SQL查詢獲取下一個和以前的文章。

理論上我最終是這樣的:

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 
    } 
} 

回答

10
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(); 
    } 
} 
+0

我認爲該方法應該是靜態的,以使其工作或使用'scope ..',例如'public static function getNextArticle()' – roll

+0

@roll如果你使這個方法是靜態的,你將失去使用'$ this - > id' – jeromegamez

-1

我可能會嘗試一下這樣的...不知道它是否會工作雖然

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

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

身份證很少完全順序,並且沒有必要代表訂單。 –

+0

我有SQL查詢運行下一篇和以前的文章。我只是想弄清楚如何創建方法,以便將其鏈接到$ article-> find(1) - > next()例如。 –

2

來源Laravelhttp://laravel.com/docs/4.2/eloquent

條是多餘的,所以我刪除它。

Class Article extends Eloquent { 

     public function scopeNext($query) 
     { 
      return $query->where('id', '>', $this->id)->take(1)->get(); 
     } 

     public function scopePrevious($query) 
     { 
      return $query->where('id', '<', $this->id)->take(1)->get(); 
     } 
    } 
相關問題