实际上,上篇已经聊到Query Builder通过连接工厂类ConnectionFactory构造出了MySqlConnection实例(假设驱动driver是mysql),在该MySqlConnection...Grammar将会把Query Builder的fluent api编译成SQL,PDO编译执行该SQL语句得到结果集results,Processor将会处理该结果集results。...OK,那Query Builder是如何把书写的api编译成SQL呢?...编译API成SQL 还是以上篇说到的一行简单的fluent api为例: Route::get('/query_builder', function() { // Query Builder...总结:本文主要学习了Query Builder的数据库连接器和编译API为SQL相关源码。编译SQL细节和执行SQL的过程下篇再聊,到时见。
Builder也只是在PDO基础上封装的一层API集合,Query Builder提供的Fluent API使得不需要写一行SQL语句就能操作数据库了,使得书写的代码更加的面向对象,更加的优美。...OK,那Query Builder是如何把书写的api编译成SQL呢?...编译API成SQL 还是以上篇说到的一行简单的fluent api为例: Route::get('/query_builder', function() { // Query Builder...OK,那Query Builder是如何把书写的api编译成SQL呢?...编译API成SQL 还是以上篇说到的一行简单的fluent api为例: Route::get('/query_builder', function() { // Query Builder
说明:本文主要学习Laravel Database模块的Query Builder源码。...实际上,Laravel通过Schema Builder来设计数据库,通过Query Builder来CURD数据库。...Query Builder并不复杂或神秘,只是在PDO扩展的基础上又开放封闭的包装了一层,提供了fluent api,使得书写的代码也很简洁流畅。...是核心的组件,也是类最多的文件夹 Events 装载事件类的文件夹 Migrations 实际执行migrate相关命令的类 Query Query Builder的代码主要在这个文件夹,主要的类是Builder...Builder主要在Query文件夹下,以一行简单又经常使用的代码为例来学习下内部实现的原理吧: Route::get('/query_builder', function() { // Query
说明:本文主要学习下Query Builder编译Fluent Api为SQL的细节和执行SQL的过程。...开发环境:Laravel5.3 + PHP7 Builder::toSql() 看下toSql()的源码: public function toSql() { // $this...GrammarsGrammar::compileSelect(Builder query),看下compileSelect(Builder query)的源码: public function...OK, 总的来说,通过了解Query Builder的实现原理后,知道其并不复杂或神秘,只是一个对PDO更友好封装的包裹,Query Builder有几个重要的类或概念:连接类MySqlConnection...那Eloquent ORM又是什么,与Query Builder是什么关系呢?既然有了Query Builder,为何还提供了Eloquent ORM呢?
背景: yum update会大范围升级或其他命令升级版本,以及linux内核也会升级,升级后内核可能会出现损坏的情况无法正常启动系统。...centos及ubuntu 查看所有内核 cat /boot/grub2/grub.cfg |grep "menuentry " 或 rpm -qa | grep kernel 查看默认内核: uname...-r 修改: grub2-set-default 'CentOS Linux (#据实际内核而定) 7 (Core)' 查看结果: grub2-editenv list 删除(例如): yum...remove -y kernel-3.10.0-957.el7.x86_64 ubuntu系统可通过修改/etc/default/grub 将GRUB_DEFAULT设为: GRUB_DEFAULT
为了防止在 Linux 系统中意外删除一些重要文件或目录,除了必要的备份之外,还有一个好方法,就是使用 chattr(Change Attribute)命令 在类 Unix 等发行版中,该命令能够有效防止文件和目录被意外的删除或修改...switch 常用属性指令如下 a:让文件或目录仅供附加用途; b:不更新文件或目录的最后存取时间; c:将文件或目录压缩后存放; d:将文件或目录排除在倾倒操作之外; i:不得任意更动文件或目录;...s:保密性删除文件或目录; S:即时更新文件或目录; u:预防意外删除。...i权限 > chattr -i -R rumenz 设置文件只能添加数据,不能修改,删除,移动该文件 > lsattr rumenz.txt ---------------- rumenz.txt >...设置rumenz目录下只能添加目录,文件,但是不能对里面的文件夹,文件修改,移动,删除。
protected function performJoin(Builder $query = null) { $query = $query ?...$query, Builder $parentQuery, $columns = ['*']) { $query->from( $query->getModel()->getTable().' as...以上就是Laravel实现软删除的大概逻辑。这里有一个细节,Laravel中软删除的标记是一个时间格式的字段,默认delete_at。通过是否为null判断数据是否删除。...但是有的时候,项目中会使用一个整形的字段标记数据是否删除。在这样的场景下,需要对Laravel的软删除进行修改才能够实现。...主要的方案是: 1.自定义SoftDeletes trait,修改字段名称,修改更新删除标记操作; 2.自定义SoftDeletingScope 修改查询条件 3.自定义HasRelationships
* * @return void */ public function down() { //删除表时要删除外键约束,参数为外键名称...\Builder|\App\Post whereId($value) * @method static \Illuminate\Database\Query\Builder|\App\Post whereCategoryId...Database\Query\Builder|\App\Post whereSummary($value) * @method static \Illuminate\Database\Query\Builder...\Database\Query\Builder|\App\Post wherePublished($value) * @method static \Illuminate\Database\Query...\Builder|\App\Post whereCreatedAt($value) * @method static \Illuminate\Database\Query\Builder|\App\Post
小勤:怎么隔列删除/隐藏数据? 大海:在Excel里的话其实比较简单,比如先加个辅助行(隔列加一些标志信息),定位(快捷键Ctrl+G)到相应的标志信息,然后就可以删除或隐藏了。...小勤:那如果是在Power Query里,怎么办? 大海:Power Query里没有隐藏,只能直接删除列。 小勤:啊。那怎么批量删除比较快一点呢?...大海:首先,Power Query里有选择列功能,用起来比较方法,如下图所示: 小勤:这个功能很直观啊,把列罗列在一起进行选择,真是方便清晰很多。 大海:对的。...小勤:那还能像Excel里面那样加个辅助行之类的来删除吗? 大海:这个在Power Query里其实不好操作,因为PQ里加行的操作不是很方便的。...不过,可以考虑用转置后隔行删除然后在转回来,如下动画所示: 小勤:这样也很快啊! 大海:对的。但是这个过程的步骤还是有点儿多的。
代码时间 常规的删除操作分两步进行,一步是把数据从数据库中查询出来,使用laravel模型的方法, 则返回的是一个模型对象。第二步,调用模型对象的delete方法。...所以引入了软删除的概念,就是在表内添加一个字段,用于标记,这一行条目是否算是删除状态。在laravel中, 这个软删除字段默认是 deleted_at。你也可以在模型中手动指定。...大家注意, 想我们的常规操作一样,就是获取一个时间戳$time, 然后把字段赋值: $this->deleted_at = $time; 最后使用update方法更新模型,并修改数据库条目。...Contact extends Model{ public function scopeStatus($query, $status) { return $query-...写在最后 本文从laravel模型的写操作删除动作,讲到了软删除的概念。进而引申出来本地作用域和全局作用域的使用。软删除几乎贯穿了我们应用的始终,需要大家勤学苦练。
在 Laravel 中,默认情况下这个值设置的就是 PDO::FETCH_OBJ 。关于如何修改成 PDO::FETCH_ASSOC ,我们会在后面的文章中学习。...直接通过编辑器的跳转功能点击 update() 方法就会跳转到 laravel/framework/src/Illuminate/Database/Query/Builder.php 的 update(...这个就要一步一步来看了,前面其实我们已经看到了 laravel/framework/src/Illuminate/Database/Query/Builder.php 这个对象的类文件,那么我们是怎么通过...use Illuminate\Database\Query\Builder as QueryBuilder; // laravel/framework/src/Illuminate/Database/...// laravel/framework/src/Illuminate/Database/Query/Builder.php public function from($table, $as = null
这可以是单个记录或多个记录。 第二个参数是唯一标识记录的列。除 SQL Server 外的所有数据库都要求这些列具有PRIMARY或UNIQUE索引。 提供要更新的列作为第三个参数(可选)。...您可以提供带有文字或原始表达式的列名和键值对(见下文)。...Lumen 如果您使用 Lumen,则必须手动实例化查询构建器: $builder = new \Staudenmeir\LaravelUpsert\Query\Builder(app('db')->connection...()); $builder->from(...)...默认的时间格式,并且我们的插入时间和更新时间也不是laravel默认的字段,我们需要做如下定义: //时间戳类型 public $timestamps = true; //重写插入和修改时间的字段名
通过给文件或目录添加或删除某些属性,来保证用户不能删除或修改这些文件和目录,不管是有意的还是无意的,甚至 root 用户也不行。听起来很有用,是不是?...就是说你不能删除或修改这个文件,就算你是文件的拥有者和 root 用户也不行。...$ sudo chattr -i file.txt 现在,这不可改变属性已经被删除掉了。你现在可以删除或修改这个文件了。...$ rm file.txt 类似的,你能够限制目录被意外删除或修改,如下一节所述。 防止目录被意外删除和修改 创建一个 dir1 目录,放入文件 file.txt。...就表示我们可以修改这个文件或目录。 现在让我们试试删除这个文件或目录。
: composer require barryvdh/laravel-debugbar --dev composer require barryvdh/laravel-ide-helper --dev...\Builder|\App\Merchant whereId($value) * @method static \Illuminate\Database\Query\Builder|\App\Merchant...\Builder|\App\Product whereId($value) * @method static \Illuminate\Database\Query\Builder|\App\Product...\Builder|\App\Product whereCreatedAt($value) * @method static \Illuminate\Database\Query\Builder|\App...\Query\Builder|\App\Shop whereMerchantId($value) * @method static \Illuminate\Database\Query\Builder
的数据操作分两种 – DB facade – Eloquent ORM 它们除了有各自的特色外,基本的数据操作都是通过 Illuminate\Database\Query\Builder 调用方法去完成整个...这个文件在你项目目录中的 vendor/laravel/framework/src/Illuminate/Database/Query 下,你可以自行去查看。...$parameters); } 去调用,这个方法最终以 new Builder() 而告终, public function newEloquentBuilder($query) { return...new Builder($query); } 最后我们到了 Illuminate\Database\Eloquent\Builder 文件下,这个类中涵盖了ORM的基本操作,例如find , findOrFail...如果你在代码用到了get方法,抱歉,这里没有,它依旧会通过__call 方法将你的请求转发到 Illuminate\Database\Query\Builder 类中 $this->query->{$method
empty($where['id'])) { return $result; } $where['is_del'] = 0; $list = UserModel::query..."2023-11-18 01:01:01", "is_del": 0 } } 以上查询就开发完成了,下面进行一些调试处理 打印sql $list = UserModel::query...$res = $userMod->where($where)->update($data); 9.4 删除 $userMod->delete($data) 一般删除是采取软删除,不会把数据真正删除掉...forpage($page, $limit) ->orderby('create_at', 'desc') ->selectRaw("user.*") ->get(); 9.6 联表 $builder...= UserModel::query()->from('user AS u')->selectRaw('u.*'); $builderData = $builder->join('contract AS
array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 我们这里是修改的...在执行 update() 操作时,我们最后进入了 laravel/framework/src/Illuminate/Database/Query/Grammars/Grammar.php 这个对象中。...public function compileInsert(Builder $query, array $values) { // Essentially we will force every...public function compileSelect(Builder $query) { if ($query->unions && $query->aggregate) {...protected function compileComponents(Builder $query) { $sql = []; foreach ($this->selectComponents
领取专属 10元无门槛券
手把手带您无忧上云