在 Laravel 5.4 中执行批量删除语句时,如何根据 Eloquent 的“删除”事件执行操作?

2023-12-21

我的项目中有 2 个 Eloquent 模型:App\StoredFile and App\StoredImageSize.

The StoredFile模型负责保存上传的文件信息。如果上传的文件是图像,则 2 个缩略图将存储在存储中,它们的属性存储在 DB 中(StoredImageSize model).

关系如下:

存储文件.php:

public function sizes()
{
    return $this->hasMany('App\StoredImageSize');
}

存储图像大小.php:

public function originalImage()
{
    return $this->belongTo('App\StoredFile');
}

StoredImageSize有一个观察者类(StoredImageSizeObserver)已通过服务提供商注册并且运行良好。

问题是我想在从数据库中删除后续行时从存储(在我的例子中是硬盘)中删除实际文件。

StoredImageSizeObserver.php:

public function deleting(StoredImageSize $file)
{
    Storage::delete($file->server_url);
}

逻辑是这样的:

$file = StoredFile::find(1);
$file->sizes()->delete();    // it does delete all related rows from 'StoredImageSize' but not files from storage
$file->delete()

实际上它从来没有击中deleting方法来自StoredImageSizeObserver类为Laravel 文档 https://laravel.com/docs/5.4/eloquent#deleting-models says:

通过 Eloquent 执行批量删除语句时,对于已删除的模型,不会触发删除和删除模型事件。这是因为执行删除语句时从未实际检索模型。

那么,我该如何应对这种情况呢?任何解决方案或建议将不胜感激。


In the StoredFilemodel 添加以下方法,你有两种选择:

  • 首先 :

      protected static function boot() {
          parent::boot();
          static::deleting(function(StoredFile $fileToDelete) {
              foreach ($fileToDelete->sizes as $size)
              {
                  $size->delete();
              }
    
              $fileToDelete->delete()
          });
      }
    
  • 第二 :

      protected static function boot() {
          parent::boot();
          static::deleting(function(StoredFile $fileToDelete) {
              $size_ids = $fileToDelete->sizes()->lists('id');
              StoredImageSize::whereIn($size_ids)->delete();
    
              $fileToDelete->delete()
          });
      }
    

或者创建一个观察者StoredFile模型不适合StoredImageSize,因为正如您所说,对于 StoredImageSize 元素,删除事件不会级联!并在中执行与上面相同的操作deleting的方法StoredFileObserver :)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel 5.4 中执行批量删除语句时,如何根据 Eloquent 的“删除”事件执行操作? 的相关文章

  • Drupal 模板/主题资源或建议?

    我有兴趣为我正在开发的 Drupal 网站创建自定义主题 我是 Drupal 的新手 但是我在处理构建主题 CSS PHP HTML 所需的基本概念方面拥有相当多的经验 所以 我的问题是 我从哪里开始 有创建 Drupal 主题的规范指南吗
  • 从 PHP 中的平面路径数组构建目录树

    所以 标题可能令人困惑 但我不知道如何表达这种数组结构 它肯定是一个树结构 但至于它的创建 这正是我所渴望的 它似乎不遵循典型的递归数组树构建 我正在尝试从平面路径数组创建列目录布局 每个路径都位于其自己的多维数组内 该数组旨在构建 mac
  • 将 bcrypt 密码哈希从 PHP 迁移到 Python - ValueError:无效的 hashed_pa​​ssword salt

    我有一个 PHP7 应用程序 它可以像这样对用户密码进行哈希处理 hash password hash password PASSWORD BCRYPT 例如 如果我通过test1234为此 我有 2y 10 aazE9OUKZlOQiM6
  • PHP foreach 数组与 stdClass 对象

    我需要帮助尝试获取数组和 stdClass 对象内的值 仅供参考 我正在使用 foursquare API 我有这样的事情 fsq groups venues gt response gt groups echo pre print r f
  • 在 csv 中查找数值

    我需要检查特定的数字 ID 是否在给定的字符串或逗号分隔值中 myVal 20 字符串可以仅包含多个值中的一个值 以逗号分隔 str 20 str 20 33 5 str 220 33 5 4420 本来我想到用strpos 但是20可以在
  • PHP:会话.auto_start

    我在同一台服务器上有两个项目 它们的设置在 session auto start 中冲突 相关post https stackoverflow com questions 1378324 php setting variables in i
  • PHP 联系表单未提交

    您好 我之前曾成功使用过这个非常简单的 php 联系脚本 但当我尝试在新的 HTML 页面上实现它时 表单不会提交 任何人都可以看到任何明显的错误吗 任何帮助将非常感激 这是表单的 html div div
  • 服务容器的使用寿命是多少?

    我正在尝试了解 Symfony2 框架 来自 Java Spring 背景 我意识到 Symfony2 中的 Scope 与 Spring 中的 Scope 不同 此外 通过 Symfony3 范围已弃用 https stackoverfl
  • 在 WordPress 中调用自定义 php 模板中的函数

    我想调用我在 WordPress 中编写的另一个 php 类中的函数 但是我对语法感到困惑 例如要获取页面上的标题 您只需调用 get header 等等 但是我如何调用特定类中的函数 例如 在index php中 我想调用一个名为this
  • 终端从包含空格的变量传递参数

    在终端中如何将包含空格的字符串作为参数传递 它实际上跳过了空格后面的部分 只取第一个单词 word soccer ball shell exec casperjs test js word word 那么我怎样才能转义空白它只运行这个命令
  • 差异:查看页面源代码与在 Firebug 中查看

    当我查看页面的页面源时 例如 http my sa ucsb edu public curriculum coursesearch aspx http my sa ucsb edu public curriculum coursesearc
  • 550 Bad HELO - 主机冒充域名 Laravel

    我正在尝试设置 Laravel 身份验证 包括 密码重置 功能 但当我尝试发送电子邮件时 我偶然发现了一个错误 我得到的错误是 Expected response code 250 but got code 550 with message
  • 如何清除服务器上的 Laravel 路由缓存

    这是关于本地主机上的路由缓存 关于本地主机 我的route php 文件中有2 条路线 两者都工作正常 没问题 我在学习route clear和route cache时发现了一个小问题如下 如果我在我的route php文件中评论任何一条路
  • 如何知道 Solr Optimize 何时完成?

    我正在使用 Solr php client 通过 php 与 Solr 进行通信 这段代码触发solr优化命令 solr gt optimize 请问有没有什么方法可以确定优化完成了 这都是因为我的网站上有一个管理页面 我每天必须手动优化
  • Preg_split 用逗号,忽略括号,PHP

    我必须分割一个字符串 并且我想避免用括号内的逗号分割它 那么我该如何实现呢 Example string string1 sString1 sString2 ssString1 ssString2 string2 string3 resul
  • 使用 Laravel Intervention 库缓存动态图像不起作用

    我目前正在使用 Laravel 5 并利用干预图像集成 http image intervention io http image intervention io 我动态地使用它 因此图像具有如下 URL http example org
  • 在 Laravel Schema 中创建价格列

    我想在 Laravel 模式中创建一个价格列 public function up Schema create cameras function Blueprint table table gt increments id table gt
  • PHP 中的舍入

    a 0 1 0 7 10 int 0 1 0 7 10 PHP 返回 false 有人能给我解释一下 为什么会发生这种情况吗 第一个返回 8 第二个返回 7 引用PHP 浮点精度手册中的大红色警告 http de3 php net manu
  • 当我在 PHP 中将 print_r() 应用于数组时,为什么会得到“Resource id #4”? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • Elasticsearch 如何使用通配符进行 OR 查询

    我很难尝试使用 elasticsearch 构建查询 我想查询类似的内容 WHERE field 1 is match string OR field 2 is wildcard match string OR field 3 is fuz

随机推荐

  • 为什么抛出局部变量调用移动构造函数?

    最近 我 玩弄 了右值来理解它们的行为 大多数结果并不让我感到惊讶 但后来我发现 如果我抛出一个局部变量 则会调用移动构造函数 在那之前 我认为移动语义规则的目的是保证仅当编译器可以检测到该对象将不再被使用 如在临时对象中 时才会移动 并变
  • 如何在 Seaborn distplot 中绘制 Pandas 日期时间系列?

    我有一个带有日期时间列的熊猫数据框 我想根据该日期列绘制行的分布 但我目前收到一个无用的错误 我有 df Date pd to datetime df Date errors raise s sns distplot df Date 这会引
  • 模板引用变量中的 ref- 前缀和 # 有什么区别(Angular 2)

    我想了解输入文本框中下面提到的模板引用变量符 号之间的区别
  • 如何将手势从 UITextView 传递到 UICollectionViewCell

    我有一个水平滚动的 UICollectionView 和包含 UITextView 的 UICollectionViewCells 有什么方法可以将 textview 上的手势传递给单元格 以便调用 didSelectItemAtIndex
  • 来自 GitHub 的 Grails 插件

    如果我想使用来自 Git Hub 的 Grails 插件 我是否只需下载 zip 文件并使其在本地 Maven 存储库中可用 我位于防火墙后面 这不允许我解决依赖关系 您可以获取源并运行maven install要使其在本地 Maven 存
  • scikit-learn 的 KNN 如何计算概率估计?

    scikit learn中KNN算法的实现是如何计算概率估计的predict proba X method 以下示例摘自 sklearn 文档 但进行了一些修改 以便您可以理解我们在这种情况下做什么 有关更多详细信息 请参见 https s
  • 自定义颤振小部件形状

    我正在尝试在 Flutter 中构建以下布局 我希望实现两件事 渲染绘制对角线的背景 我猜是通过 BoxDecoration 让粉色容器沿着对角线夹住子项 即 如果文本对于一行来说太大 则应换行到新行 有任何想法吗 这是我的代码 Stack
  • 如何部署我的 Windows Phone 8.1 应用程序?

    我刚刚使用 update 2 RC 更新了我的 Visual Studio Professional 2013 我做了一个简单的应用程序来尝试 我选择发布并单击项目中的构建按钮 但它不适用于创建 xxxx appx 文件 它正在创建 xxx
  • python - 将列表a中的每个元素与列表b相乘并相加

    功能 def unique common a b 我有两个清单 可以说 a 2 3 5 7 9 和另一个清单 b 5 8 4 1 11 此列表 b 为您提供与第一个列表 a 对应的每件商品的单件价格 例如 如果您要购买 2 单位的第一项商品
  • Flash 内容的 IE7 z-index 问题

    我遇到了 IE7 中的 Flash 内容始终位于菜单项上方的问题 我有如下结构 div div div ul li foo li li bar li ul div 现在 菜单的最后一项打开 它显示在 Flash 内容后面 摩天大楼位于页面内
  • Jquery阅读文章内容之间的位置进度

    在这个例子中http jsfiddle net SnJXQ 61 http jsfiddle net SnJXQ 61 阅读进度指示器 但它的宽度从网站顶部开始增加 但我们需要进度条宽度开始增加 当文章内容 div 到达文章内容末尾时 这是
  • Google Cloud Datastore 与 Google App Engine

    我正在查看新的 Google Cloud Datastore 看起来很棒 但有一些我无法理解的事情 它应该取代 Google App Engine 数据存储吗 如何在 GAE 中使用它 他们两者有什么区别呢 我有一个 Java 中的 GAE
  • 更新 Google App Engine 上数据存储区中的大量实体

    我想对特定类型的所有实体执行一个小操作并将它们重写到数据存储中 我目前有 20 000 个此类实体 但想要一个可以扩展到任意数量的解决方案 我有什么选择 Use a mapper http code google com p appengi
  • 如何在Chrome开发工具中返回当前调试位置?

    我不断发现代码在 Chrome 调试器中的断点处停止的情况 然后当我使用 控制台 等另一个选项卡并返回 源 时 我丢失了代码停止的位置 我必须单击单步 回到正轨 但这会跳过所寻求的断点 有没有办法到达调试器停止的地方 您可以通过单击调用堆栈
  • 如何添加/设计回调函数

    如何在 C 中设置 注册回调函数 以便在从队列中读取数据时调用函数 Edit 1 使用尼尔的答案作为完整的答案 在头文件中 include
  • 如何在 Android 中读取文本文件? [复制]

    这个问题在这里已经有答案了 我想从文本文件中读取文本 在下面的代码中 发生了异常 这意味着它转到catch堵塞 我将文本文件放在应用程序文件夹中 我应该把这个文本文件 mani txt 放在哪里才能正确读取 try InputStream
  • 必须为此操作提供 PartitionKey 值

    我正在尝试从 Azure Cosmos Db 集合中检索文档 我遇到了错误 Servlet service for servlet dispatcherServlet in context with path threw exception
  • Gson Long 从 String 解析时丢失数据

    我有一些对象的 json 字符串表示 类对象是 public class SMPBBaseObjectsList public ArrayList data new ArrayList lt gt public Integer count
  • 带资源字典的wpf类库

    WPF 类库程序集 dll 中是否可以有资源字典 我问这个问题是因为我有一个 应用程序 WPF 程序集 exe 如果我尝试将程序集的类型转换为 WPF 类库 我会收到错误 无法在库的项目文件中指定元素ApplicationDefinitio
  • 在 Laravel 5.4 中执行批量删除语句时,如何根据 Eloquent 的“删除”事件执行操作?

    我的项目中有 2 个 Eloquent 模型 App StoredFile and App StoredImageSize The StoredFile模型负责保存上传的文件信息 如果上传的文件是图像 则 2 个缩略图将存储在存储中 它们的