往数据库填充假数据时,不会触发模型观察器吗?

在填充时用的是 Eloquentinsert(),这样为什么不会触发观察器 TopicObserver

Topic::insert($topics->toArray());

按照文档的说法,当模型第一次被保存时, creating 和 created 事件会被触发,saving / saved 事件也会被触发。

why?是因为触发器会忽略 seeder 文件吗?还是其他原因?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5
DianWang

批量填充不触发观察器,文档上有写的

5年前 评论

@DianWang

文档内容:通过 Eloquent 进行批量更新时,不会为更新的模型触发 saved 和 updated 模型事件。这是因为在进行批量更新时,并未检索该模型。

文档里写的很模糊,这里的更新是指数据变动(增删改),还是单纯的 update 操作?

tinker 里,

// 用 create 创建,不管是一条还是多条,都会触发观察器
factory(Topic::class, 1)->create();
factory(Topic::class, 10)->create();
//而用 insert 创建,不管单条还是多条数据都不会触发
$data = factory(Topic::class, 1)->make();
Topic::insert($data->toArray()[0]);

而在 TopicsTableSeeder 里,与上面的情况相同,->create() 都可以触发, ->insert() 都不能触发
还是一脸懵逼。。
@Summer

5年前 评论
DianWang

@hehorange saved和updated事件,单个的时候会触发,批量的时候不触发

5年前 评论

@DianWang 我这里不对啊,用 insert 单个也不会触发,用 create 多个也能触发。
我猜,应该是这两个方法的问题,去看源码了。。

5年前 评论

@hehorange 一个是db的操作,一个是Eloquent的东西。Eloquent方法有事件监听,db的操作没有相关的方法。这个看源码就知道了

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!