dpxua26604 2013-09-07 23:07
浏览 51
已采纳

Laravel 4:如何将WHERE条件应用于Eloquent类的所有查询?

I'm trying to implement an "approved' state for a table I have, it's pretty straightforward, basically, if the row's approve column equals 1; that row should be retrieved, otherwise it shouldn't.

The problem is, now I have to go through the whole codebase and add a WHERE statement(i.e., function call) which is not only time consuming but also inefficient(if I ever want to remove that feature, etc.)

How can I do that? Is it as easy as adding $this->where(..) inside the Eloquent child class' constructor? Wouldn't that affect other CRUD operations? such as not updating an unapproved row?

  • 写回答

3条回答 默认 最新

  • dousao9569 2013-09-07 23:39
    关注

    The closest thing I found is Eloquent query scope.

    Even though it requires a minor change in my code(prefixing queries) it still gives me what I'm looking with great flexibility.

    Here's an example:

    Create a function within the Eloquent child class:

    class Post extends Eloquent {
    
        public function scopeApproved($query)
        {
            return $query->where('approved', '=', 1/*true*/);
        }
    
    }
    

    Then simply use it like this:

    $approvedPosts = Post::approved()-><whatever_queries_you_have_here>;
    

    Works perfectly. No ugly repeated WHERE function calls. easy to modify. Much easier to read(approved() makes much more sense than where('approved', '=', 1) )

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助