($value, $operator) = $this->prepareValueAndOperator( $value, $operator, func_num_args() == 2...Builder $query) { if (is_null($query->wheres)) { return ''; } //每一种where查询都有它自己的编译器函数来创建...where{$where['type']}"}($query, $where); })->all(); } 每一种where查询(orWhere, WhereIn......)都有它自己的编译器函数来创建...); $statement->execute(); return $statement->fetchAll(); }); 直到getPdoForSelect这个阶段Laravel...通过梳理流程我们知道: Laravel是在第一次执行SQL前去连接数据库的,之所以$pdo一开始是一个闭包因为闭包会保存创建闭包时的上下文里传递给闭包的变量,这样就能延迟加载,在用到连接数据库的时候再去执行这个闭包连上数据库
通过laravel第三方扩展包 spatie/laravel-query-builder 官方文档:https://docs.spatie.be/laravel-query-builder/v2/introduction.../ 1.composer 引入 composer require spatie/laravel-query-builder 2.控制器使用 use Spatie\QueryBuilder\QueryBuilder...AllowedFilter::exact('category_id'):表示精确过滤的字段 我们还可以键入某个scope(查询作用域)对数据进一步过滤,本文使用了定义好的withOrder作用域 //调用排序函数...php namespace App\Http\Queries; use App\Models\Topic; use Spatie\QueryBuilder\QueryBuilder; use Spatie...\QueryBuilder\AllowedFilter; class TopicQuery extends QueryBuilder { public function __construct
array_dot() 函数把多维数组扁平化成一维数组,并用”.”符号表示深度 array_except() 从数组当中移除指定键值对 array_fetch() 函数返回包含被选择的嵌套元素的扁平化数组...array_first() 函数返回数组中第一个通过给定的测试为真的元素 array_last() 函数返回数组中最后一个通过给定的测试为真的元素 array_flatten() 函数将会把多维数组扁平化成一维...array_forget() 函数将会用”.”符号从深度嵌套数组移除给定的键值对 array_get() 函数将会使用”.”符号从深度嵌套数组取回给定的值 array_only() 函数将会只从数组返回给定的键值对...array_pluck 函数将会从数组拉出给定键值对的清单 array_pull 函数将会从数组返回给定的键值对,并移除它 array_set 函数将会使用”.”符号在深度嵌套数组中指定值 array_sort...htmlentities,并支持 UTF-8 ends_with 判断句子结尾是否有给定的字串 snake_case 把给定的字串转换成 蛇形命名(下划线连接) str_limit 限制字串的字符数量(一个中文2个字符
asset() 使用当前请求的scheme(HTTP或HTTPS)为前端资源生成一个URL: $url = asset('img/photo.jpg'); laravel自带了laravel-mix,用于对...生成的文件的命名会是:app.asjduiik2l1323879dasfydua23.js, 即js原文件名+hash+.js后缀,因为中间的那个hash是随时会变化的,所以在页面引入js文件的时候,就不能写死文件的路径...,而是使用mix('app.js'),此时laravel会自动去匹配当前的app.js对应哪个app+hash+.js的文件(项目public目录下会有一个mix-manifest.json, 这里面保存了两者的对应关系
', 1); } 只需要声明一个以 scope 为首的小驼峰命名的函数方法即可,并返回一个 QueryBuilder 对象实例。...既然本地作用域返回的是 QueryBuilder 实例,那么自然就可以链式调用本地作用域的方法,和 QueryBuilder 的方法。...return $query->where('max_attendees', $maximum); } 现在把上述两个方法串联使用: $events = Event::zip(43016)->attendees(2)...->get(); 生成的SQL语句也符合预期: SELECT * FROM events WHERE zip = '43016' and max_attendees = '2'; 写在最后 本期我们又旧事重提...,把laravel模型的作用域设计方法拿出来温习了一下。
这样很繁琐,其实laravel给我们提供了一个友好的函数,辅助我们很快完成这样任务,代码如下: #前端代码 <form action="{{route('admin.role.index')}}" method
而laravel提供了非常好的 debug 支持,只需在 env 文件内指定 debug = true ,就可以在页面打开 debug bar 用于调试。 ?...我们需要使用框架提供的 DB 类的方法: DB::enableQueryLog(); dd(DB::getQueryLog()); 使用enableQueryLog()函数打开SQL记录,然后是正常的数据库逻辑...还有一种方法,就是链式调用 QueryBuilder 的 toSql 方法,即可打印当前模型的SQL语句,而并不执行。...DB::table('users')->toSql() 上述方法输出的结果: select * from `users` 当然只要是返回的 QueryBuilder 对象,均可使用。..., $query->getBindings(), $query->toSql()); dd($sql); 生成的SQL语句,使用问号作为位置参数,如果想要格式化输出,还可以使用 vsprintf 这个函数
在写Laravel测试代码(一) 中聊了关于如何提高 laravel 数据库测试性能,其实简单一句就是:每一个test case, 只重新 seed 被污染的表。...PHPUnit processes * * 1) Generate a random testing database with automatic destroy upon finish * 2)...$pdo->errorInfo()[2]); } /* // Check if tables are inserted....lx1036%`.* TO 'testing'@'localhost'; 这样就临时测试数据库就准备完毕了,然后就是seed 测试数据,执行unit/feature tests, 执行assert等等,可以参考写Laravel
Laravel为我们提供了很多辅助函数,方便我们执行各种操作,但laravel也支持我们自定义辅助函数。...方法如下: 当app\目录下新键文件helpers.php 在helpers.php添加你自定义的辅助函数 function sayHi() { return "hello word" } 在compoers.json...classmap": [ "database/seeds", "database/factories" ], //添加辅助函数..."files": [ "app/helpers.php" ] } 这样在任意位置即可调用自定义辅助函数
自定义laravel 辅助函数 Laravel 包含各种各样的全局「辅助」PHP 函数,你可以找到并使用它们,但是 ,可能并不是所有的内置方法都能满足你,因此我们需要自定义一个辅助方法。...hello() PHP Fatal error: Call to undefined function hello() in eval()'d code on line 1 发现报错,提示找不到这个函数
引言 Laravel框架内提供了 Str,Arr 等帮助类,用于字符串操作,数组操作,将PHP内置的 str 开头的函数,和 array 开头的函数,使用面向对象的方式进行操作。 ?...如果我们要写一些全局使用的助手函数,应该如何加载到 Laravel 框架内呢?本文就来说一说。 学习时间 首先我们创建一个文件,比如路径地址就在 app/lib/helper.php 内。...然后声明一个函数: if (!...在根目录,命令行内执行: composer dump-autoload 之后在框架内的任何地方,就可以直接访问 helper 文件内声明的函数了。...Laravel 的方式 我们也可以使用laravel加载类库,注册类库的办法,进行助手函数文件的动态加载。
虽然laravel的函数已经很丰富,但有时我们也需要自定义一些函数,可以将这些函数封装到app/helpers.php文件中 如:创建一个递归获取目录及文件的函数 新建函数文件 新建app/helpers.php
查询语句相对来说会复杂一些,我们在测试代码中增加了 where() 、orderBy() 和分页相关的组织函数。最后,通过一个 get() 函数就可以获得列表的信息。...在 查询构造器 中,还有其它很多的链式函数可以实现非常复杂的数据库操作,大家可以自己去研究一下。...use Illuminate\Database\Query\Builder as QueryBuilder; // laravel/framework/src/Illuminate/Database/...Connection.php public function query() { return new QueryBuilder( $this, $this->getQueryGrammar...(), $this->getPostProcessor() ); } 注意这个 QueryBuilder 实际上是 use Illuminate\Database\Query\Builder
] => Array // ( // [id] => 19 // [name] => Mary // [sex] => 2...而另外一个 map() 函数就不用多说了,之前我们说过,Laravel 的 PDO 在默认查询构造器的情况下,走的是 PDO::FETCH_OBJ ,获得的集合结果中的每个数据都是一个 stdClass...laravel/framework/src/Illuminate/Collections/Collection.php 是集合类,里面的方法大部分都调用的是 laravel/framework/src/...getConnection() 会返回一个之前讲过的工厂方法创建的 Connection 对象,而 query() 方法则会根据 Connection 创建一个 QueryBuilder 对象。...不过这里需要注意的是,模型默认生成的 QueryBuilder 是 llaravel/framework/src/Illuminate/Database/Eloquent/Builder.php 对象,
public_path() public_path函数返回public目录的绝对路径:$path = public_path(); base_path() base_path函数返回项目根目录的绝对路径...:$path = base_path(); 你还可以使用base_path函数为相对于应用目录的给定文件生成绝对路径:$path = base_path('vendor/bin'); base_path...函数和 url()函数asset()很类似 app_path() app_path函数返回app目录的绝对路径:$path = app_path(); 你还可以使用app_path函数为相对于app...目录的给定文件生成绝对路径:$path = app_path('Http/Controllers/Controller.php'); config_path() config_path函数返回应用配置目录的绝对路径...() storage_path函数返回storage目录的绝对路径:$path = storage_path(); 还可以使用storage_path函数生成相对于storage目录的给定文件的绝对路径
测试框架:Laravel 5.5 步骤指导 1....status, 'message' =>$message, 'data' =>$data ); exit(json_encode($result)); } 2....; ★ 举一反三,以后的公共函数都可写在 functions.php 中 …
文章前导 在使用 Laravel 框架时发现框架的模型无法支持批量创建数据和批量修改数据。于是乎就自己封装了一个批量添加和批量修改数据的方法。...示例演示 函数封装 use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { public $timestamps...return 0; } catch (\Exception $e) { return $e->getMessage(); } } } 函数调用...]; // 批量更新数据格式 $updateData = [ ['id' => 1, name' => '张三', 'age' => 12, 'sex' => '男'], ['id' => 2,
在Laravel中大量使用这两个内置函数来设计代码,比如\Illuminate\Foundation\Application::fireAppCallbacks()的源码: /** * Call...Laravel中的IlluminateFoundationApplication::environment()使用了这三个函数来设计代码,很巧妙: /** * Get or check the...'); $arg_number2 = $app->testFuncArg(['Laravel', 'PHP']); // Assert...$arg_number2); } } class Application { private $provider; public function __construct(...,这个函数在Laravel中大量使用,尤其是造辅助函数时使用,参考Illuminate/Foundation/helpers.php,Illuminate/Support/helpers.php。
基本路由// 接收一个 URI 和一个闭包Route::get('hello', function () { return 'Hello, Laravel';});// 支持的路由方法Route:..."_method" value="PUT"> 或使用辅助函数
我们先看一下DatabaseManager的构造函数: public function __construct($app, ConnectionFactory $factory) { $this...explode('::', $name, 2) : [$name, null]; } public function getDefaultConnection() { // laravel默认是...函数,生成普通的连接对象。...public function query() { return new QueryBuilder( $this, $this->getQueryGrammar...DatabaseManager代理的数据库连接对象了, 所以最开始执行的代码 DB::table('users')->get()经过我们上面讲的历程,最终是由Connection来完成执行的,table方法返回了一个QueryBuilder