zoukankan      html  css  js  c++  java
  • laravel 本地作用于 模型查询

    如果我们要再多个控制器中通过模型中查询相同的条件时候,可以再模型中使用本地作用域来达到重复使用。

    举个例子:以帖子为例...我要以创建时间排序,和更新时间排序,去显示。

    再模型中我们可以这样做:

     

    class  Topic

    {

      // 按更新时间排序的帖子

      public function scopeRecent( $query )

      {

        return $query->orderBy( ' updated_at ' , ' desc ' ) ;

      }

      //按创建时间排序的帖子

      public function scopeCreateTime( $query )

      {

        return $query->order( ' created_at ' , ' desc ' ) ;

      }
    }

    你会发现两个方法都有scope,是因为:本地作用域能定义通用的约束集合以便在应用中复用,只需要在 scope 前加上一个 Eloquent 模型方法即可。作用域应始终返回查询生成器实例,再我们使用本地作用域的时候,去掉scope 即可。比如:

    在控制器中:

    use  AppTopic;

    class Topic  extends  Controller

    {

      public  function  index( Topic $topic)

      {

        $topics  =  $topic->Recent()->paginate( 5 ) ;

      }

    }

    可以从例子中看出来,我们使用本地作用于方法不需要带上 scope 即可。这个例子的意思为:从 topic 模型中按更新时间去排序后进行分页。

    只要我们在Topic模型去以更新时间排序查询的时候,在任何控制器中可以直接调用:Recent 方法,避免在控制器中写上很多链式查询条件。

    我们可以优化以下以上的代码:

    创建一个本地作用域集合查询的方法,接收一个查询参数:

    public  function  scopeSetSelect( $query , $param )

    {

      switch( $param )

      {

        case  值1 :

        return  $query->recent() ;

        break ;

        case  值2 :

        return  $query->createtime();

        break ;

      }

    }

    我们可以看到,这个方法接收一个参数 $param 跟据它不同的值来调用不同的生成构造器,我们在控制器中看看使用方法:

    public  function  index ( Request $request , Topic $topic)

    {

      $topics  =  $topic->setSelect( 值1 )->paginate( 5 ) ;

    }

    在这里可以看出,我们调用这个作用域方法,传入一个值1,这样子,我们实际调用的就是 recent 这个本地作用域方法,我们从模板传递过来值,给集合查询的方法。

    在模板中,我们通过 get 形式传参,举例:<a  href=" {{ Request::url() }} ?status=值1 ">最新帖子</a>   在这个例子中,Request::url() 获取的是当前的 url。

    给当前的 url 带上参数值1,通过路由传递参数到控制器,在控制器中通过 $request->status 可以取到这个值,把值传入作用域方法就可以得到对应的结果。

     

     

  • 相关阅读:
    windows下的tfjs-node安装异常总结
    微信小游戏广告位iphonex底部适配问题
    JS做深度学习3——数据结构
    JS做深度学习2——导入训练模型
    ASP.NET MVC4网站搭建与发布【最新】
    JS做深度学习1——偶然发现与入门
    聊聊H5与JS近几年的黑科技
    Mysql中让两个字段不同时相同的方法
    JUnit4在Eclipse中的使用
    编写DAO,通过JdbcTemplate操作数据库的实践
  • 原文地址:https://www.cnblogs.com/muwu/p/9038526.html
Copyright © 2011-2022 走看看