whereHas/orWhereHas 方法基于闭包函数定义查询条件,比如我们想要过滤发布文章标题中包含「Laravel学院」的所有用户: $users = User::whereHas('posts...: 如果你想进一步过滤出文章标题和评论都包含「Laravel学院」的用户,可以在上述闭包函数中通过查询构建器进一步指定: $users = User::whereHas('posts', function...学院%'); })->whereHas('posts.comments', function ($query) { $query->where('content', 'like', 'Laravel...whereHas 方法和 orWhereHas 方法相对的,也有 whereDoesntHave 和 orWhereDoesntHave 方法,使用方法一样,这里就不再赘述了。...,主要包含两种方式:懒惰式加载和渴求式加载; 基于关联查询构架复杂查询对查询结果进行过滤; 关联模型的更新、插入和删除操作。
get();//获取id为$id的数据集 Model::where('id',$id)->all();//获取id为$id的数据 Model::where('id',$id)->exists();//查询...id为$id的数据是否存在 Model::where('id',$id)->pluck('name','id')->first();//查询id为$id的id和name ,[id=>name] Model...::select('id','name')->first();//只查id和name字段 Model::selectRaw('id , name as 姓名')->first();//查询id,name...作为姓名字段展示,selectRaw()里面可以使用原生sql语句 Model::whereIn('id',[1,2,3])->get();//whereIn查询 where id in (1,2,3...get();//只查找关联数据的id,name字段 Model::with(['relation'=>function($query){}])->get();//只查找符合条件的关联数据 Model::whereHas
学习时间 对于数据库DBA可能更习惯从SQL的角度出发,从SQL现有的语言结构和功能上解决问题。...大家注意那个 IN 子句,其实是一个查询结果集,从另个表返回的。 写SQL真的很伤神,不如用框架自带的orm,操作起来非常人性化,拼装也很简单。那就抛出一个问题,Laravel如何实现上述的子查询?...对Laravel来说,简直不要太简单,你只要在写whereIn的时候,将数组使用闭包返回就可以了。...写在最后 本文通过一个SQL语句查询在Laravel中的实现方式,解释了laravel在拼装SQL查询时的自由度,使用起来非常灵活。...对于固定的查询方式,或者经过优化的SQL语句,你大可直接发送给Laravel直接运行以便提高效率。
很多情况下会用到复合查询: ---- $query->orWhere('target_type','offline'); $query->where(function($query
laravel update子查询其他字段(支持whereIn) Feed::whereIn('id', $commentableIds) ->update([ 'feed_comment_count...Illuminate\Support\Facades\DB::raw('`feed_comment_count` * 5 + `like_count`') ]); UserExtra::whereIn...('user_id', $userIds) ->increment('comments_count', 1); laravel ORM where and orWhere 多个条件如 ab...where 多条件查询,可以比较,不局限于等于的时候 以前不知道还可以这样写,手册上也没有,日了狗,真应该找个时间看一下源码 单条件 $school= School::where('id', '<=',
DB facade 为每种类型的查询提供了方法: select,update,insert,delete 和 statement。...运行 Select 查询 你可以使用 DB Facade 的 select 方法来运行基础的查询语句我们在上面创建的路由里增加个 index 的路由 dump 是 laravel 的打印函数可以把它理解为...select * from test where testId = :id', ['id' => 1]); dump($binding); } 查询构造器 Laravel 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口...Laravel 的查询构造器使用 PDO参数绑定来保护您的应用程序免受 SQL 注入攻击。因此没有必要清理作为绑定传递的字符串 注意:PDO 不支持绑定列名。...中就是 whereIn() 第一个参数还是字段名第二个参数是数组 function getList() { $data = DB::table('test')->whereIn
up前面玩了 DB 查询,但是laravel开发基本不怎么使用db方式查询,应该有更强大的 模型 Model 介绍 Laravel 的 Eloquent ORM 提供了一个漂亮、简洁的 ActiveRecord...laravel 的 Model 使用先进的 Eloquent ORM 但也有优缺点 优点是数据库的操作变的简单安全 缺点也明显数据库的操作变的缓慢笨重 Eloquent ORM 作为 laravel 中亮点...和使用了 DB 取出来的数据一样的是都是一个 Collection 集合,不一样的是 DB 取出来的是数组,Model 取出来的是一个类,需要一层一层的剥开点到 attributes 我们才能看到数据...$TestMdl->select('id', 'title', 'describe') ->where('title', '', '文章1') ->whereIn...像 get 里面这一长串方法一样,我们在查询数据的时候经常会有略微复杂的查询把它们写成一个模型方法 比如说在 app/Models/Test.php 文件中写一个 getList 方法 <?
前言 相信熟悉laravel的童鞋都知道,laravel有批量一次性插入多条记录,却没有一次性按条件更新多条记录。...是否羡慕thinkphp的saveAll,是否羡慕ci的update_batch,但如此优雅的laravel怎么就没有类似的批量更新的方法呢?...本篇文章,结合laravel的Eloquent做了调整,可有效防止sql注入。 示例代码 pluck($referenceColumn)->values()->all(); $bindings = array_merge($bindings, $whereIn); $whereIn =...$whereIn . ")"; // 传入预处理sql语句和对应绑定数据 return DB::update($updateSql, $bindings); } catch (Exception $e)
其实,查询构造器就相当于我们将原始 SQL 的操作进行了一次封装而已。而且,在模型中,其实内部调用的也是这个 查询构造器 。也就是说,查询构造器是介于 模型 和 原始语句 操作中间的一层。...当然,要使用哪种一般会是团队的选择,而且往往更多情况下是 查询构造器 和 模型 两个结合起来使用。 好了,话说回来,我们还是看看代码。...查询语句相对来说会复杂一些,我们在测试代码中增加了 where() 、orderBy() 和分页相关的组织函数。最后,通过一个 get() 函数就可以获得列表的信息。...我们又发现了一个设计模式在 Laravel 框架中的应用,意外不意外,惊喜不惊喜! 连表查询 普通的连表查询的使用还是非常简单的,我也就不多说了,下面的代码中也有演示。...总结 关于 查询构造器 的其它使用在官方文档上都有,今天的文章就只是简单地介绍了一些常用的和独特的查询构造方式而已,毕竟我们的系列文章的主旨还是在分析源码上。
数据库没有使用我们设想的索引进行sql查询,导致查询特别慢。...mysql强制索引查询语句 select * from user where age = 26 force index(age); // 强制索引 select * from user where age...dbSchemaManager->listTableDetails($table); return $doctrineTable->hasIndex($name); } } PHP Copy 在laravel...')); }) ->when(request('position',false),function ($q){ $q->whereIn...('position_id',request('position')); }) ->whereIn('agents.status', $validStatus
下面是我们整理的php的laravel学习的常见的错误以及解决的办法,我还会持续更新,请关注 ---- ---- ## 错误1: 错误代码: No message 错误原因: 查看这个路由参数,缺少参数...图片找不到 解决办法: 在报错的img中添加src ---- ---- ## 错误3: 错误代码: Invalid argument supplied for foreach() (View: D:\Laravel...\resources\views\Personal\qtspace.blade.php) 错误原因: sql错误 解决办法: 将 Blog::where('user_id',$user_id)->whereIn...('accessable',['public','protected'])->toSql() 改为 Blog::where('user_id',$user_id) ->whereIn('accessable...\Test\Reals\View \Foo\FACE.BLADE.PHP 解决办法: 解析错误:语法错误、意想不到的“$DATA”(TY变量)、期望“、”或“”(视图:D:\ SHIXXIIA\LARAVEL123
查询小技巧 我们首先来介绍几个 Laravel 自带的语法糖,可以帮助我们快速获取期望的查询结果,提高编码效率。...IN 查询可以通过 whereIn 方法来实现: DB::table('posts')->whereIn('user_id', [1, 3, 5, 7, 9])->get(); 对应的 WHERE 子句是...使用该方法时,需要注意传递给 whereIn 的第二个参数不能是空数组,否则会报错。 同样,与之相对的,还有一个 whereNotIn 方法,表示与 whereIn 相反的查询条件。...将上述代码中的 whereIn 方法改为 whereNotIn,对应的查询子句就是 where user_id not in (1, 3, 5, 7, 9)。...null查询 NULL 查询就是判断某个字段是否为空的查询,Laravel 查询构建器为我们提供了 whereNull 方法用于实现该查询: DB::table('users')->whereNull(
文章前导 在使用 Laravel 框架时发现框架的模型无法支持批量创建数据和批量修改数据。于是乎就自己封装了一个批量添加和批量修改数据的方法。...] = $setSql; } $updateSql .= implode(', ', $sets); $whereIn...); $whereIn = rtrim(str_repeat('?...,', count($whereIn)), ','); $updateSql = rtrim($updateSql, ", ") . " WHERE `" ....$whereIn . ")"; return DB::update($updateSql, $bindings); } return
DB::table('users') ->whereNotBetween('votes', [1, 100]) ->get(); #whereIn.../ whereNotIn / orWhereIn / orWhereNotIn $users = DB::table('users') ->whereIn('id...->orWhere('title', '=', 'Admin'); }) ->get(); #子查询...查询结果默认根据数据表的 created_at 字段进行排序 。...'>', 100)->dd(); DB::table('users')->where('votes', '>', 100)->dump(); 参考 https://learnku.com/docs/laravel
Event::fire(new TestEvent($str)); event(new TestEvent($str)); php artisan event:generate 批量生成event和listen...编辑EventServiceProvider.php 备注:事件可以广播,通过websocket服务,依赖Redis的pub和sub模式
更好的用户体验 解决办法withInput() + old() laravel 会自动把用户输入的数据存到一次性的session里。
wehere条件 OR条件 其它where条件 whereBetween / whereNotBetween whereIn / whereNotIn whereNull / whereNotNull...使用sql语句执行插入 基本插入操作 更新操作 使用sql语句执行更新操作 基本更新操作 指定列的增减 删除操作 使用sql执行删除 基本删除操作 悲观锁 事务处理 查看日志记录 其它操作 在Laravel.../ whereNotIn $users = DB::table('users') ->whereIn('id', [1, 2, 3]) ->get(); $users = DB::...MySQL 5.7和Postgres数据库中提供了新的数据类型json,对json提供了原生的支持,使用->可以对json列进行查询。...DB::reconnect('foo'); DB::disconnect('foo')d; ---- 参考: Laravel 5.2 官方文档
SqlKata查询生成器是一个用C# 编写的功能强大的Sql查询生成器。它是安全的,与框架无关。灵感来源于可用的顶级查询生成器,如Laravel Query Builder和 Knex。...SqlKata支持复杂的查询,例如嵌套条件、从子查询中选择、过滤子查询、条件语句等。...目前它有built-in编译器,用于SqlServer、MySql、PostgreSql、Oracle 和Firebird等。...Get(); foreach(var book in books) { Console.WriteLine($"{book.Title}: {book.AuthorName}"); } 条件查询...DateTime.Today.DayOfWeek == DayOfWeek.Friday; var books = db.Query("Books") .When(isFriday, q => q.WhereIn
常规web/app后端服务器 im即时通讯服务器 tcp/udp物联网服务器 综合性项目,各种混合协议通讯 背景 在用过 laravel 框架,发现它的 路由 和 数据库ORM 确实非常好用,但是整体确实有点慢...于是打算做一个拥有非常好用的路由和orm又非常简单的框架。所以你会发现one框架的 路由 和 ORM 有laravel的影子。...Article::class,'user_id'); } // 定义事件 // 是否开启自动化缓存 // …… } 复制代码 使用模型 fpm swoole // 查询一条记录...$user = User::find(1); // 关联查询 $user_list = User::whereIn('id',[1,2,3])->with('articles')->findAll(...// $user_list = User::whereIn('id',[1,2,3])->with('articles')->findAll()->toArray(); 复制代码 上面是通过http
Laravel 简单的批量更新数据 需求:将order 表的 status 字段更新为2,条件是 id 在 arr 数组中的行。...$orderId = [1,2,4,6,8]; \DB::table('order')->whereIn('id', $orderId)->update(['status' => 2]); 完成简单的数据批量更新