精华内容
下载资源
问答
  • laravel查询

    2020-08-21 16:52:09
    $sub = SyncLog::select('insert_num', 'created_at', 'end_time')->where('status', '=', 1)->orderBy('id', 'desc'); $dailyResults = \DB::table( \DB::raw("({$sub->toSql()}) as sub") ) ...
    $sub = SyncLog::select('insert_num', 'created_at', 'end_time')->where('status', '=', 1)->orderBy('id', 'desc');
    
    $dailyResults = \DB::table( \DB::raw("({$sub->toSql()}) as sub") )
                        ->mergeBindings($sub->getQuery())
                        ->select(DB::raw('end_time, sum(insert_num) as total'))
                        ->groupBy('end_time')
                        ->orderBy('end_time', 'desc')
                        ->limit($days)
                        ->get();
    展开全文
  • laravel中我们常常会使用join,leftjion和rightjoin进行连表查询,非常的方便,但是我今天遇到一个问题,就是链表查询需要on多个条件,即我要订单的id和发货人都一样,默认的join只支持单个查询,所以我下面总结两...
  • laravel5系列的查询构造器高级查询

    千次阅读 2019-07-03 21:22:35
    用了laravel框架之后发现一些的复杂的sql很难写出来,现把一些用到的高级sql查询总结分享出来: 子查询:如果用原生的写法就比较简单了这里就不多说了,这里讲解一个laravel查询构造器用子查询: //子查询语句 $...

    用了laravel框架之后 发现一些的复杂的sql很难写出来,现把一些用到的高级sql查询总结分享出来:

    子查询:如果用原生的写法就比较简单了这里就不多说了,这里讲解一个laravel的查询构造器用子查询:

    //子查询语句
    $sub = DB::table('detail')->select(['cate_id'])->groupBy('cate_id');
    
    //生成sql语句
    $sub->toSql()
    
    //里面用原生的sql语法
    DB::raw
    
    //完整语句
    
    $list = DB::table('cate')
        ->leftJoin(DB::raw("({$sub->toSql()}) blog_detail"),'cate.id','=','detail.cate_id')
        ->select(DB::raw('cate_name'))
        ->paginate(3);
    

     

    使用复杂的原生sql查询,注意整个sql要用()包裹还得取别名,因为分页会count(*)

        $sql = "(select a.name,b.displayname  from  roles a  inner join 
                    (
                            select role_id,group_concat( DISTINCT displayname SEPARATOR ',') as displayname  
                            from role_has_permissions b  
                            left join perssion c on b.perssion_id=c.id
                            GROUP BY role_id order by role_id asc
                
                    ) b on a.id=b.role_id) cc";
            $data =  DB::table(DB::raw($sql))->paginate(10);
            return $data;

    未完,待续..........................

    展开全文
  • laravel数据库查询

    2017-02-08 11:01:00
     有时候,您可能需要创建更高级的where子句,如“存在”或嵌套参数分组。Laravel query builder可以处理这些: DB::table('users') ->where('name', '=', 'John') ->orWhere(function($query) { $query->where('...

    一、Selects

    检索表中的所有行

    $users = DB::table('users')->get();
    foreach ($users as $user)
    {
    var_dump($user->name);
    }

    从表检索单个行

    $user = DB::table('users')->where('name', 'John')->first();
    var_dump($user->name);

    检索单个列的行

    $name = DB::table('users')->where('name', 'John')->pluck('name');

    检索一个列值列表

    $roles = DB::table('roles')->lists('title');

    该方法将返回一个数组标题的作用。你也可以指定一个自定义的键列返回的数组

    $roles = DB::table('roles')->lists('title', 'name');

    指定一个Select子句

      $users = DB::table('users')->select('name', 'email')->get();
     $users = DB::table('users')->distinct()->get();
     $users = DB::table('users')->select('name as user_name')->get();

    Select子句添加到一个现有的查询$query = DB::table('users')->select('name');

    $users = $query->addSelect('age')->get();

    where

    $users = DB::table('users')->where('votes', '>', 100)->get();

    OR

    $users = DB::table('users')->where('votes', '>', 100)->orWhere('name', 'John')->get();

    Where Between

    $users = DB::table('users')->whereBetween('votes', array(1, 100))->get();

    Where Not Between

    $users = DB::table('users')->whereNotBetween('votes', array(1, 100))->get();

    Where In With An Array

    $users = DB::table('users')->whereIn('id', array(1, 2, 3))->get();
    $users = DB::table('users')->whereNotIn('id', array(1, 2, 3))->get();

    Using Where Null To Find Records With Unset Values

    $users = DB::table('users')->whereNull('updated_at')->get();

    Order By, Group By, And Having

    $users = DB::table('users')->orderBy('name', 'desc')->groupBy('count')->having('count', '>', 100)->get();

    Offset & Limit

    $users = DB::table('users')->skip(10)->take(5)->get();

    二、连接

    Joins

    查询构建器也可以用来编写连接语句。看看下面的例子:

    Basic Join Statement

    DB::table('users')
      ->join('contacts', 'users.id', '=', 'contacts.user_id')
      ->join('orders', 'users.id', '=', 'orders.user_id')
      ->select('users.id', 'contacts.phone', 'orders.price')
      ->get();

    左连接语句

    DB::table('users')
      ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
      ->get();
      DB::table('users')
      ->join('contacts', function($join)
      {
      $join->on('users.id', '=', 'contacts.user_id')->orOn(...);
      })
      ->get();
      DB::table('users')
      ->join('contacts', function($join)
      {
      $join->on('users.id', '=', 'contacts.user_id')
      ->where('contacts.user_id', '>', 5);
      })
      ->get();

    三、分组

      有时候,您可能需要创建更高级的where子句,如“存在”或嵌套参数分组。Laravel query builder可以处理这些:

    DB::table('users')
    ->where('name', '=', 'John')
    ->orWhere(function($query)
    {
    $query->where('votes', '>', 100)
    ->where('title', '<>', 'Admin');
    })
    ->get();
    

     上面的查询将产生以下SQL:

      select * from users where name = 'John' or (votes > 100 and title 
    <> 'Admin')
      Exists Statements
      DB::table('users')
      ->whereExists(function($query)
      {
      $query->select(DB::raw(1))
      ->from('orders')
      ->whereRaw('orders.user_id = users.id');
      })
      ->get();

    上面的查询将产生以下SQL:

    select * from userswhere exists (
    select 1 from orders where orders.user_id = users.id
    )

    四、聚合

    查询构建器还提供了各种聚合方法,如统计,马克斯,min,avg和总和。

    Using Aggregate Methods

    $users = DB::table('users')->count();
    $price = DB::table('orders')->max('price');
    $price = DB::table('orders')->min('price');
    $price = DB::table('orders')->avg('price');
    $total = DB::table('users')->sum('votes');

    Raw Expressions

    有时您可能需要使用一个原始表达式的查询。这些表达式将注入的查询字符串,所以小心不要创建任何SQL注入点!创建一个原始表达式,可以使用DB:rawmethod:

    Using A Raw Expression

    $users = DB::table('users')
    ->select(DB::raw('count(*) as user_count, status'))
    ->where('status', '<>', 1)
    ->groupBy('status')
    ->get();

    递增或递减一个列的值

    DB::table('users')->increment('votes');
    DB::table('users')->increment('votes', 5);
    DB::table('users')->decrement('votes');
    DB::table('users')->decrement('votes', 5);

    您还可以指定额外的列更新:

      DB::table('users')->increment('votes', 1, array('name' => 'John'));

    Inserts

    将记录插入表

    DB::table('users')->insert(
    array('email' => 'john@example.com', 'votes' => 0)
    );

    将记录插入表自动增加的ID

    如果表,有一个自动递增的id字段使用insertGetId插入一个记录和检索id:

    $id = DB::table('users')->insertGetId(
    array('email' => 'john@example.com', 'votes' => 0)
    );

    注意:当使用PostgreSQL insertGetId方法预计,自增列被命名为“id”。

    多个记录插入到表中

    DB::table('users')->insert(array(
    array('email' => 'taylor@example.com', 'votes' => 0),
    array('email' => 'dayle@example.com', 'votes' => 0),
    ));

    四、Updates

    更新一个表中的记录

    DB::table('users')
    ->where('id', 1)
    ->update(array('votes' => 1));

    五、 Deletes

    删除表中的记录

    DB::table('users')->where('votes', '<', 100)->delete();

    删除表中的所有记录

    DB::table('users')->delete();

    删除一个表

    DB::table('users')->truncate();

    六、Unions

    查询构建器还提供了一种快速的方法来“联盟”两个查询

      $first = DB::table('users')->whereNull('first_name');
      $users = DB::table('users')->whereNull('last_name')->union($first)->get();

    unionAll方法也可以,有相同的方法签名。

      Pessimistic Locking

      查询构建器包括一些“悲观锁定”功能来帮助你做你的SELECT语句。  运行SELECT语句“共享锁”,你可以使用sharedLock方法查询:

    DB::table('users')->where('votes', '>',100)->sharedLock()->get();

    更新“锁”在一个SELECT语句,您可以使用lockForUpdate方法查询:

     DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();

    七、缓存查询

      你可以轻松地缓存查询的结果使用记忆法:

    $users = DB::table('users')->remember(10)->get();


      在本例中,查询的结果将为十分钟被缓存。查询结果缓存时,不会对数据库运行,结果将从默认的缓存加载驱动程序指定您的应用程序。  如果您使用的是支持缓存的司机,还可以添加标签来缓存:

    $users = DB::table('users')->cacheTags(array('people', 'authors'))->remember(10)->get();

     

    转载于:https://my.oschina.net/jmk/blog/833875

    展开全文
  • <p>I have an advanced search form to filter out results from a database using Laravel. The data is filtered correctly but I have a requirement for the user to be able to filter by first name or last ...
  • laravel中我们常常会使用join,leftjion和rightjoin进行连表查询,非常的方便,但是我今天遇到一个问题,就是链表查询需要on多个条件,即我要订单的id和发货人都一样,默认的join只支持单个查询,所以我下面总结两...

    在laravel中我们常常会使用join,leftjion和rightjoin进行连表查询,非常的方便,但是我今天遇到一个问题,就是链表查询需要on多个条件,即我要订单的id和发货人都一样,默认的join只支持单个查询,所以我下面总结两种方法:

    一、使用原是表达式(不推荐)

    原生SQL中我们可以通过如下方法进行:

    select * from `orders` left join `users` on `orders`.`usename`=`users`.`usename` and `orders`.`platform`=`users`.`platform` where `orders`.`order_status` = 2
    

    那么结合laravel,我们可以这样:

    DB::select('select * from `orders` left join `users` on `orders`.`usename`=`users`.`usename` and `orders`.`platform`=`users`.`platform` where `orders`.`order_status` = :id', ['id' => 1]);
    

    二、使用高级的Join语法(推荐使用)

    我们只需要所以如下代码即可完成我们的Join多个条件:

    DB::table('users')
        ->join('contacts', function ($join) {
            $join->on('users.id', '=','contacts.user_id')->on('users.usename', '=','contacts.usename');
            })
        ->get();
    

    如果你想要了解更多,我们可以看一下文档中的描述:

    让我们以传入一个闭包当作 join 方法的第二参数来作为开始。此闭包会接收 JoinClause 对象,让你可以在 join 子句上指定约束:

    DB::table('users')
        ->join('contacts', function ($join) {
            $join->on('users.id', '=','contacts.user_id')->orOn(...);
            })
        ->get();
    

    若你想要在连接中使用「where」风格的子句,则可以在连接中使用 where 和 orWhere 方法。这些方法会比较字段和一个值,来代替两个字段的比较:

    DB::table('users')
            ->join('contacts', function ($join) {
                $join->on('users.id', '=', 'contacts.user_id')
                     ->where('contacts.user_id', '>', 5);
            })
            ->get();
    

    原文出处: https://phpartisan.cn/news/15.html

    展开全文
  • laravel 5.4 查询构建器

    2017-08-14 11:09:32
    Laravel 查询构建器也可以处理这些。作为开始,让我们看一个在括号中进行分组约束的例子: DB::table('users') ->where('name', '=', 'John') ->orWhere(function ($query) { $query->where('votes', '>', 100) ...
  •  有时候,您可能需要创建更高级的where子句,如“存在”或嵌套参数分组。Laravel query builder可以处理这些:   复制代码 代码如下: DB::table('users') ->where('name', '=', 'John') ->orWhere(function($...
  • 在项目中再次碰见laravel中从数据库中查询到的结果是对象,用toArray也不好用,之前改过一次,印象中是在/confing/database.php, 'fetch' => PDO::FETCH_OBJ,这行改为'fetch' =>FETCH_ASSOC就好用了,但是我...
  • 1 <... 3 #DB 高级查询 4 // select * from table where A and B or C 5 $all_data = DB::table("shopnc_goods_common") 6 ->where("base_goods_commonid", -1) 7 ->where('go...
  •  有时候,您可能需要创建更高级的where子句,如“存在”或嵌套参数分组。Laravel query builder可以处理这些:   复制代码 代码如下: DB::table('users') ->where('name', '=', 'John') ->orWhere...
  • Laravel框架学习(数据库高级查询

    万次阅读 2016-03-14 10:21:07
    1、连接查询(join)连接查询指的是将两张表或多张表关联到一起进行查询,获取一个表的行与另一个表的行匹配的数据。常见的连接查询包括内连接(等值连接)、左(外)连接、右(外)连接和交叉连接(完全连接)等。 ...
  • 以上这篇基于laravel where的高级使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。 您可能感兴趣的文章:浅谈laravel中的关联查询with的问题在laravel中使用with实现...
  • 上一节我们简单介绍了如何使用查询构建器对数据库进行基本的增删改查操作,这一节我们来探讨如何使用查询构建器实现一些更高级查询操作。 1、连接查询(join) 连接查询指的是将两张表或多张表关联到一起进行...
  • <p>I have two models: <code>Order</code> and <code>Department, joined by a many-to-many relationship. The pivot table on this relationship contains a "status" field.... <li>Manufacturing: completed ...
  • Laravel ORM高级操作

    千次阅读 2018-02-26 15:08:02
    分页+排序 //forPage('当前页码','每页多少条...行子查询,传参需要用闭包传参的方式,子查询选择表时用from('表名')。  其它: //一. 变量不为空时,定义  !defined('ORDER_SALEPAY') && define('ORDER_SALEPAY',5); 
  • laravel where的高级使用方法

    万次阅读 2018-05-26 18:13:27
    Laravel作为一个人见人爱的框架,相信很多人在使用,那就避免不了对Sql语句的应用,很多情况下,在多种字段作为条件查询使用where的时候,不需要复杂的原生语句, 使用一个闭包,就能达到你想要的效果。 欢迎...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,380
精华内容 552
关键字:

laravel的高级查询