首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

3分钟短文:Laravel说要用软删除,可不要真删

软删除 在许多情况下,你不会真正想要从数据库删除记录,而是用一种不再在应用程序显示它们方式对其进行注释。这就是所谓软删除。...Laravel本身支持软删除,只需要进行少量配置更改,确保在执行delete或destroy时,模型记录不会被实际删除。作为一个例子,我们修改Event模型支持软删除。...首先创建一个新迁移,将名为deleted_at添加到events表: php artisan make:migration add_soft_delete_to_events --table=events...其实原理很简单,就是模型追加一个全局作用域,每个查询子句追加上如下筛选条件: WHERE deleted_at IS NULL laravel已经我们写好这部分逻辑了,在模型内引入如下trait:...任何设置deleted_at日期时间值记录,都不会包含在任何查询结果,因此看起来已经被删除了。

2.1K00

Gorm实战,轻松掌握数据库增删改查技巧!

`deleted_at` IS NULL fmt.Println(result.RowsAffected) // 返回找到记录计数,等于“len(student)” fmt.Println(result.Error...`deleted_at` IS NULL 若要在查询条件包含零值,可以使用map,该映射将包含所有键值作为查询条件,例如: // 如果想要在查询包含0字段,可以使用map来做 db.Where...`id` = 25 2.4.4 内联条件 查询条件可以类似于Where方式内联到'First'和'Find'等方法 // 如果是非整形主键,根据主键获取记录 db.First(&Student{...name LIKE "name%") 3.4 From 子查询 GORM 允许您在 Table 方法通过 FROM 子句使用子查询,例如: db.Table("(?)...`deleted_at` IS NULL // 可以看到Name字段不会更新,这是合理,因为如果零值字段也更新,Student表好多数据都会被更新 6.1 使用sql.NullString更新

2.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

通过 Laravel 查询构建器实现复杂查询语句

有时候,我们想要获取并不是一行或几行记录,而是某个字段值,你当然你可以查询到一行记录后从结果对象获取指定字段值,但是 Laravel 我们提供了更便捷语法: $name = '学院君'; $...你一定有过这样经历,从数据库获取指定查询结果后,主键 ID 值键,某个字段值值构建关联数组,以前,你可能不得不遍历查询结果构建数组才能解决这样问题,在 Laravel ,我们只需在查询构建器上调用...null查询 NULL 查询就是判断某个字段是否查询,Laravel 查询构建器我们提供了 whereNull 方法用于实现该查询: DB::table('users')->whereNull(...where 条件子句,它将会返回被连接两个表笛卡尔积,返回结果行数等于两个表行数乘积,如果带 where返回是匹配行数。...不是每个用户都有对应 posts 记录,所以会出现某些 posts 记录结果: ?

29.9K20

Laravel Eloquent 模型关联关系(下)

另外,如果访问是模型实例上 author() 方法时,返回不是用户实例了,而是一个关联关系实例,该实例注入了查询构建器,所以你可以在其基础上通过方法链方式构建查询构建器进行更加复杂查询,我们一个一对多查询例...', function ($query) { $query->where('title', 'like', 'Laravel学院%'); })->get(); 底层执行 SQL 查询语句如下...前提是 user_id 允许 null,否则会抛出异常。 对象模型 如果外键字段 user_id 允许的话,当我们访问 Post 模型上 author 属性时,默认返回 null。...author 属性时,就会返回如下默认对象了: 该特性其实应用了设计模式对象模式,好处是在代码里可以为不同情况编写一致性代码。...这样,我们就不需要在每个地方去判断如果文章作者信息该如何处理了,因为这种情况下返回也是一个正常 User 模型实例。

19.5K30

laravel 模型Eloquent ORM 添加编辑删除

那么直接给 $guarded 赋值数组就等于没有任何限制了 /** * 不可批量赋值属性。...create 方法返回值就是当前插入到数据库内容up可以通过返回值判断成功或者失败而实际开发up经常需要返回新增数据id那直接访问返回 id 属性即可。...数据中一眼就发现了后三条数据不同,我们之前用 DB 插入到数据库数据 created_at 和 updated_at 字段都是,而我们用模型插入和修改后 created_at 和 updated_at...当时我希望能有一个恢复删除功能比如说回收站,laravel 模型我们提供了很方便软删除功能 要启用软删除首先数据表需要有 deleted_at 字段 之前玩迁移时候简单说了下创建迁移时候调用...属性转换成 DateTime / Carbon 实例 当然,你需要把 deleted_at 字段添加到数据表

1.7K21

Laravel拼装SQL子查询最佳实现

大家注意那个 IN 子句,其实是一个查询结果集,从另个表返回。 写SQL真的很伤神,不如用框架自带orm,操作起来非常人性化,拼装也很简单。那就抛出一个问题,Laravel如何实现上述子查询?...对Laravel来说,简直不要太简单,你只要在写whereIn时候,将数组使用闭包返回就可以了。...->where('active', 1); }) ->get(); 这样使用 DB::raw,还有 whereRaw 方法,你几乎就是在写原生SQL语句了。比较直观。...写在最后 本文通过一个SQL语句查询在Laravel实现方式,解释了laravel在拼装SQL查询时自由度,使用起来非常灵活。...对于固定查询方式,或者经过优化SQL语句,你大可直接发送给Laravel直接运行以便提高效率。

3.7K10

Laravel 实现Eloquent模型分组查询并返回每个分组数量 groupBy()

Laravel 5.5 Linux mint 18 PHPStorm 最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库一个字段并返回每个分组数量...having 方法用法和 where 方法类似: $users = DB::table('users') - groupBy('account_id') - having('account_id...这时可使用 select 方法自定义一个 select 子句来查询指定字段: $users = DB::table('users')- select('name', 'email as user_email...('count(*) as value'); 我用了个Data(Model),返回是个Builder对象,而此处却要一个字符串,所以改回了 $sql = DB::raw('count(*) as value...参考: Laravel Eloquent groupBy() AND also return count of each group 以上这篇Laravel 实现Eloquent模型分组查询并返回每个分组数量

4.2K51

Laravel5.7 Eloquent ORM快速入门详解

* * @var array */ protected $guarded = ['price']; } 如果你想要让所有属性都是可批量赋值,可以将 $guarded 属性设置数组:...当模型被软删除后,它们并没有真的从数据库删除,而是在模型上设置一个 deleted_at 属性并插入数据库,如果模型有一个非 deleted_at 值,那么该模型已经被软删除了。...* * @var array */ protected $dates = ['deleted_at']; } 当然,应该添加 deleted_at 列到数据表。...需要的话可以在 apply 方法添加 where 条件到查询: <?...注:如果你全局作用域需要添加列到查询 select 子句,需要使用 addSelect 方法来替代 select,这样就可以避免已存在 select 查询子句造成影响。

15K41

Laravel系列4.2】查询构造器

其实就像我们上篇文章中学习过使用原始 SQL 语句方式来操作数据库一样,查询构造器这个东西就是在这个原始操作基础上我们封装了一系列接口,能够让我们方便地来操作数据库。...或者说,就是像我们很早前自己封装那种 MySQL 类一样,框架帮我们完成了这一步。并且,最主要是,它可以让我们链式调用形式来操作数据库,从而避免去写繁杂混乱 SQL 语句。...查询语句相对来说会复杂一些,我们在测试代码增加了 where() 、orderBy() 和分页相关组织函数。最后,通过一个 get() 函数就可以获得列表信息。...注意看我注释第二种多条件写法,在这里面我使用了 orOn() 和 where() ,大家可以打开测试一下,结果是如下 SQL 语句。...好了,你可以继续查看这个类其它方法,可以发现 where() 、join() 这类方法返回都是 this ,通过这种返回 自身对象 方式就可以继续链式调用,通过它们,我们就可以不断这个类相对应属性添加内容

16.8K10

SQL | SQL 必知必会笔记 (一 )

列(column) 表一个字段,所有表都是有一个和 多个列组成 行(row) 表一个记录(record) 主键(primary key) 一列(或一组列),其值能够唯一标识表每一行 关键字(...关键字不能用作表或者列名字 子句(clause) SQL 语句子句构成,有些子句是必需,有些则是可选 一些规则 多条 SQL 语句必须分号分隔。...SQL 一般返回原始、无格式数据。 第一个检索行是第 0 行,而不是第 1 行。 并非所有 SQL 实现方式 都一样。虽然基本语句容易移植,但是较复杂语句会有区别。...,应该保证它是 SELECT 语句最后一条子句。...NULL 表示值,确定是否值,不能简单 = NULL,SELECT 语句有一个特殊 WHERE 子句 IS NULL ,可用来检查具有 NULL 值列。

2.5K51

laravel5.6框架操作数据curd写法(查询构建器)实例分析

) $data = DB::table('users')- get(); //first() 方法将会返回单个对象(获取一行一列) //where() 方法查询指定条件对象 $data = DB::table...select('id','name', 'email')- get(); //value() 方法从结果获取单个值,该方法会直接返回指定列值: $data = DB::table('users')...; //count() 统计数量 $data = DB::table('users')- count(); //exists() 方法来判断匹配查询条件结果是否存在 $data=DB::table('...', 'like', '测试%') - get(); //传递条件数组到where写法,建议多where查询使用这个方法 $data = DB::table('users') - where([ ['...方法添加查询参数到分页链接查询字符串; 添加 &name=$namePage到每个分页链接. {{ $data- appends(['name' = $namePage])- links() }}

2.2K30

通过 Laravel Eloquent 模型实现批量赋值和软删除

创建模型 创建模型实例例,批量赋值允许我们数组方式将待设置属性关联数组方式传递构造函数: $post = new Post([ 'title' => '测试文章标题', '...Eloquent 模型类默认白名单属性,黑名单属性 *,即所有字段都不会应用批量赋值: /** * 使用批量赋值属性(白名单) * * @var array */ protected $...实现原理 Eloquent 模型类我们提供了「软删除」功能支持。这就意味着,在 Laravel ,我们不需要编写任何额外代码就可以实现对数据库记录「软删除」。...其底层实现原理是在支持软删除数据表添加一个 deleted_at 字段,这可以通过数据库迁移来实现。...该字段默认值 NULL,表示没有被软删除。如果要在模型类中支持软删除,需要在对应模型类(在本例是 Post 模型)添加支持软删除 Trait: <?

2.3K10

Laravel系列4.1】连接数据库与原生查询

Laravel 框架 DB 和 ORM 是两个不同组件,关于 ORM 概念,我们也将在相关学习中了解到,但是现在我们先从简单普通查询学起。...这种操作其实就像是 Laravel 我们封装好了 PDO 调用,也就是像我们在很早前自己封装那种数据库调用类一样,非常简单方便。...在代码,我们通过 DB 这个门面类 insert() 方法,就可以实现原生语句增加操作。对于路由来说,其实我们不用写完全限定命名空间类名,直接写个 DB 也是可以。...注意,insert() 方法返回结果是一个布尔值,也就是添加操作成功失败情况,如果我们想获取新增加数据 id ,需要使用 DB::getPdo()->lastInsertId(); 这条语句才可以获取到...首先,我们新建一个数据库,就叫 laravel8 好了,并且同样建立一个 raw_test 表,然后就是在 .env 配置这个数据库连接信息。

3.2K50

Laravel实现批量更新多条数据

前言 近期在刷新生产环境数据库时候,需要更新表字段,如果对每条数据结果都执行一次update语句,占用数据库资源就会很多,而且速度慢。...因为项目是Laravel框架,Laravel有批量插入方法,却没有批量更新方法,没办法只能自己实现。...即是将条件语句写在了一起。 这里where部分不影响代码执行,但是会提高sql执行效率。 确保sql语句仅执行需要修改行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。...if (empty($multipleData)) { Log::info("批量更新数据"); return false; } $tableName = $this...$whereIn . ")"; Log::info($updateSql); // 传入预处理sql语句和对应绑定数据 return DB::update($updateSql, $bindings

3.6K30

laravel框架模型和数据库基础操作实例详解

新增数据、自定义时间戳、批量赋值 (1)使用save方法新增 laravel会默认维护created_at,updated_at 两个字段,这两个字段都是存储时间戳,整型11位,因此使用时需要在数据库添加这两个字段...(4)firstOrNew()属性查找记录,若没有则会创建新实例。...where('vip_ID',' ',2)- update(['vip_fenshu'= 2000]); echo $num; //返回更新行数 4....::destroy(10); //删除主键10一条记录 echo $num; //返回删除行数 $num=Student::destroy(10,5); //删除多条 或者$num=Student...::destroy([10,5]); echo $num; //返回删除行数 视频资源学习参考:http://www.imooc.com/learn/697 更多关于Laravel相关内容感兴趣读者可查看本站专题

2.8K20
领券