【问题标题】:Adding custom methods to Eloquent Model in Laravel在 Laravel 中为 Eloquent 模型添加自定义方法
【发布时间】:2014-12-05 11:28:53
【问题描述】:

我的 Laravel 4 应用中有一个 Eloquent Article 模型。目前它是空的,但我想做的是定义两个方法:

  • 获取下一篇文章
  • 获取上一篇文章

这样当我使用时:

$article = Article::find(1);

我可以跟进:

$article->getNextArticle;

$article->getPreviousArticle;

我需要在 Articles 模型中访问 find() 返回的结果,以便使用这些数据从 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
    }
}

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:
    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();
        }
    }
    

    【讨论】:

    • 我认为该方法应该是static才能使其工作或使用scope..,例如public static function getNextArticle()
    • @roll 如果您将方法设为静态,您将无法使用$this-&gt;id
    【解决方案2】:

    来源 Laravel http://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();
            }
        }
    

    【讨论】:

      【解决方案3】:

      我可能会这样尝试......但不确定它是否会起作用

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

      【讨论】:

      • ID 很少是完全连续的,并且不一定代表顺序。
      • 我要为下一篇和上一篇文章运行 SQL 查询。我只是想弄清楚如何创建方法,以便将其链接到 $article->find(1)->next() 例如。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2016-12-22
      • 2013-06-18
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多