Laravel 5.2 的软删除级联

2023-11-27

我正在尝试在 Laravel 中实现软删除。

这是我的人际关系

Tournament ( hasMany ) CategoryTournament (hasOne) CategorySettings
Tournament ( hasMany ) CategoryTournament (belongsToMany) CategoryTournamentUser

所以,我用了这个答案这对我有很大帮助

现在,当我软删除锦标赛时,所有相关的类别锦标赛也会被删除。

但后来,我尝试递归地应用它,所以我在 CategoryTournament 模型中编写了相同的代码:

static::deleting(function($categoryTournament) {
        $categoryTournament->settings()->delete();
        $categoryTournament->users()->delete();
    });

但这段代码从未运行过。 我检查了我有要删除的设置和用户,但它们都不是软删除的......

我错过了什么???它应该有效!

EDIT:

现在,我正在尝试软删除用户,这只是多了一个级别:

User (HasMany) Tournament ( hasMany ) CategoryTournament (hasOne) CategorySettings

所以现在,当我软删除用户时,它会删除他的锦标赛,但不会再删除他的 CategoryTournaments,所以这不是配置错误。


在你的里面static boot你必须迭代你的方法toMany关系。

F A:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Tournament extends Model
{
  use SoftDeletes;

  public function categoryTournament() {
    return $this->hasMany(CategoryTournament::class);
  }

  protected static function boot() {
    parent::boot();

    static::deleting(function($tournament) {
      foreach ($tournament->categoryTournament()->get() as $ct) {
        $ct->delete();
      }
    });
  }
}

其他文件应如下所示:

CategoryTournament.php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class CategoryTournament extends Model
{
  use SoftDeletes;

  public function tournament() {
    return $this->belongsTo(Tournament::class);
  }

  public function settings() {
    return $this->belongsTo(Settings::class);
  }

  protected static function boot() {
    parent::boot();

    static::deleting(function($categoryTournament) {
      var_dump('categoryTournament');
      $categoryTournament->settings()->delete();
    });
  }
}

Settings.php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Settings extends Model
{
    use SoftDeletes;

    public function categoryTournament() {
      return $this->hasOne(CategoryTournament::class);
    }

    protected static function boot() {
    parent::boot();

    static::deleting(function($settings) {
      var_dump('settings');
    });
  }
}

Migration

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateTables extends Migration
{
  /**
   * Run the migrations.
   *
   * @return void
   */
  public function up() {

    Schema::create('tournaments', function (Blueprint $table) {
      $table->increments('id');
      $table->timestamps();
      $table->softDeletes();
    });

    Schema::create('settings', function (Blueprint $table) {
      $table->increments('id');
      $table->timestamps();
      $table->softDeletes();
    });

    Schema::create('category_tournaments', function (Blueprint $table) {
      $table->increments('id');
      $table->integer('tournament_id')->unsigned();
      $table->integer('settings_id')->unsigned();
      $table->timestamps();
      $table->softDeletes();

      $table->foreign('tournament_id')->references('id')->on('tournaments');
      $table->foreign('settings_id')->references('id')->on('settings');
    });
  }

  /**
   * Reverse the migrations.
   *
   * @return void
   */
  public function down() {

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

Laravel 5.2 的软删除级联 的相关文章

  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m
  • 简单的 PHP 条件帮助: if($Var1 = in list($List) and $Cond2) - 这可能吗?

    这是一个可能的功能吗 我需要检查一个变量是否存在于我需要检查的变量列表中 并且 cond2 是否为 true 例如 if row name 1 2 3 Cond2 doThis 它对我不起作用 我在复制粘贴中更改的只是我的列表和变量名称 i
  • Laravel 从 5.6 升级到 Laravel 6

    我有一个项目https github com javedbaloch4 Laravel Booking https github com javedbaloch4 Laravel Booking发展于Laravel 5 6现在我想将其升级到
  • 重定向而不改变url

    我总是不喜欢 htaccess 我正在尝试建立一个所有请求都通过index php 的网站 但我希望URL 类似于www sample com home 该网址实际上会加载 www sample com index php page hom
  • 单词之间没有空格的语言(例如亚洲语言)中的断词?

    我想让 MySQL 全文搜索适用于日语和中文文本以及任何其他语言 问题在于这些语言以及可能其他语言通常在单词之间没有空格 当您必须键入与文本中相同的句子时 搜索没有用 我不能只在每个字符之间添加空格 因为英语也必须有效 我想用 PHP 或
  • 如何检查PHP变量是否包含非数字?

    我只是想知道检查 PHP 变量中是否有非数字的方法以及它是否也检测字符之间的空格 需要确保我的表单字段中没有添加任何奇怪的内容 提前致谢 如果您的意思是您只想要一个包含数字的值 那么您可以使用ctype digit http php net
  • MySQL/PDO::quote() 尽管使用 PDO::PARAM_INT 参数,但仍在整数周围加上引号

    无论我传递给什么值 数据类型对 它都会出现 pdo gt quote value type 它总是将其引用为字符串 echo pdo gt quote foo PDO PARAM STR foo as expected echo pdo g
  • 在 php 中为类自动生成 getter 和 setter 的最佳方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我经常创建一个包含一些私有变量的类 当设置此类的实例时 应该可以使用 getter 和 setter 填充该类的所有变量 有没有一种简单的方法可
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • Laravel 验证 如果勾选复选框,则需要输入文本?

    我一直在阅读 Laravel 验证文档 我不清楚如何结合两个规则 例如
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 为什么我需要结束 ob_start()?

    php 文档建议我应该用 ob end flush 结束每个 ob start 我在网站的每个页面上使用一个 只是为了允许我在应用程序中的任何位置使用 firephp 日志方法 该应用程序运行良好 但我想知道是否有任何我不知道的东西可能有害
  • preg_match_all 查询仅显示有问题的外部组

    我无法弄清楚如何只显示 preg 查询的外部组级别 我会给你一个例子 preg match all start end input matches 这个输入start1 start2 2end 1end产生这个输出start1 start2
  • 使用 SSL 证书验证 Web 浏览器

    是否可以使用 ssl 证书对 Web 浏览器进行身份验证 假设我在应用程序中存储私钥 有什么方法可以从浏览器读取密钥并尝试基于该私钥进行身份验证 您可以使用 SSL TLS 客户端证书身份验证来对浏览器 用户进行身份验证 服务器必须请求客户
  • 在 apache docker 容器中运行虚拟主机

    我在同一个 apache 容器中有两个 php 应用程序 我试图在端口上运行其中一个应用程序 因为它需要通过根域而不是子文件夹进行访问 我想在端口 8060 上运行应用程序 我尝试使用 apache 虚拟主机执行此操作 但它不会加载页面 h
  • CURL 中的 data-urlencode 是什么意思?

    我搜索了很多个小时试图弄清楚 php curl 中的 data urlencode 是什么 我尝试过这个 但我认为这是不对的 xmlpost object1 file https www lob com goblue pdf 在文档中是 d
  • php,统计字符并删除超过140个字符的内容

    我需要一个 PHP 函数来计算短语的字符数 如果短语长度超过 140 个字符 则此函数应删除所有其他字符并在短语末尾添加三个点 例如我们有 message I am what I am and you are what you are et
  • 如何向 laravel-passport 访问令牌添加自定义声明?

    我刚刚使用了 laravel passport 它与 jwt auth 相同 我想向我的 accessToken 添加一些自定义声明 可以吗 我想通过2fa status gt true在访问令牌和 API 调用时 有了这个访问令牌 我还想
  • 对具有混合类型值的数组进行数字排序

    我有一个像这样的混合数组 fruits array lemon Lemon 20 banana apple 121 40 50 然后申请sort 其功能如下 sort fruits SORT NUMERIC foreach fruits a

随机推荐

  • Go 中的反射类型和值

    我不太清楚这段代码的行为 func show i interface switch t i type case Person t reflect TypeOf i what t contains v reflect ValueOf i wh
  • 使 javax 验证错误消息更加具体

    抱歉 如果这个问题之前已在某处讨论过 如果有请给我链接 我还没有找到满意的答案 我一直在寻找一种方法 让 javax 验证提供的错误消息更加具体 我当前的 Min 注释消息在 ValidationMessages properties 文件
  • 将嵌入的 Word 文档另存为 PDF

    SCENARIO Word 文档嵌入到 Excel 2011 文件中 我需要将其另存为 pdf 如果是 Excel 2010 那么就不会有问题 因为 Win PC 中的 MS Office 支持 OLE 自动化 我尝试过什么 这是我在 Ex
  • 如何使具有不同子视图的 UITableViewCell 可重用?

    我有一个UITableView我自然地在其中展示 UITableViewCells它们都属于同一类 我们称之为MyCell 所以我有一个MyCell xib one MyCell h和一个MyCell m 不幸的是 该单元格确实包含一个子视
  • 为什么使用 invokedynamic 调用 Java 8 lambda?

    The invokedynamic指令用于帮助虚拟机在运行时确定方法引用 而不是在编译时硬连线它 这对于动态语言很有用 在动态语言中 直到运行时才知道确切的方法和参数类型 但 Java lambda 的情况并非如此 它们被转换为具有明确定义
  • 有人可以解释一下 CSS 媒体查询吗?

    我读过关于他们的文章CSS3 info 但我觉得它解释得不够好 我也无法让他们的示例随着我的屏幕尺寸而改变 我在 Safari FF Chrome 中尝试过 这是一个尚未准备好实施的功能吗 如果我想在浏览器窗口宽度小于1024px时调整一些
  • 将保管库机密注入 Kubernetes Pod 环境变量

    我正在尝试在需要 PostgresSQL 的 Kubernetes 环境中安装 Sonarqube 我正在使用外部 Postgres 实例 并且在 Vault 中设置了凭证 kv 密钥 SonarQube helm Chart 在容器中创建
  • Android - 触摸监听器触发两次

    在我的代码中 按钮的 ontouch 侦听器被触发两次 请在下面找到代码 我正在使用谷歌 API 2 2 java文件中的代码 submit button Button findViewById R id submit submit but
  • 拉伸和缩放 CSS 背景

    有没有办法让 CSS 中的背景拉伸或缩放以填充其容器 Use the CSS 3财产background size my container background size 100 auto width and height can be
  • 清除Python中所有lru_cache

    我在 python 中有一些带有 lru cache 缓存的函数 例如 lru cache maxsize None def my function 虽然我可以单独清除缓存 例如my function cache clear 有没有办法一次
  • 将字符串转换为私钥和公钥 (RSA)

    私钥和公钥的两个字符串是 static String Public MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDH wPrKYG1KVlzQUVtBghR8n9d n zcShSZo0 3KgyVdOea7
  • Mongoose批量更新操作

    有没有办法对猫鼬的集合进行批量更新 我发现的策略使用原始收集驱动程序 如下所示 var bulk Person collection initializeOrderedBulkOp bulk find query update update
  • 我可以使用 Maven 依赖项的路径作为属性吗?

    我的 pom xml 中有一个 Maven 依赖项 如下所示
  • Win32 应用程序窗口最终停止在 Windows 7 上绘制

    我有一个用 C 没有 MFC 或 NET 编写的大型复杂应用程序 使用该软件最频繁的客户端将在启动该软件后大约一个小时内达到所有窗口都停止绘制的状态 我们收到报告称应用程序已 挂起 因为据他们所知没有发生任何事情 实际上 应用程序正在运行
  • 如何避免在 Excel VBA 中使用 Select

    我听说过很多关于使用的厌恶情绪 这是可以理解的 Select在 Excel VBA 中 但我不确定如何避免使用它 我发现如果我能够使用变量而不是变量 我的代码将更具可重用性Select功能 但是 我不确定如何指代事物 例如ActiveCel
  • ASP.NET MVC 是无状态的吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我听说 MVC NET 是
  • 为什么我们使用模板而不是函数?

    只是寻找一些好的理由 这样我就可以开始了解它们 避免重复除了不同类型之外其他方面相同的代码 有时 您根本不能依赖隐式转换或提升 也不能将所有内容都填充到对象层次结构中
  • 如何创建自动启动的C++程序

    我正在用 C 创建一个程序 我希望能够选择让用户让它在 Windows 中自动启动 因此 当用户启动计算机时 Windows 将自动启动该程序 我已经阅读过有关修改注册表或将其放入启动文件夹中的内容 但是最好的 干净 方法是什么 启动文件夹
  • 哈希表到底是什么?

    它们是什么以及它们如何工作 它们用在哪里 我什么时候应该 不 使用它们 我听过这个词很多次 但我不知道它的确切含义 我听到的是 它们允许关联数组 通过哈希函数发送数组键 该函数将其转换为 int 然后使用常规数组 我这样说对吗 注意 这不是
  • Laravel 5.2 的软删除级联

    我正在尝试在 Laravel 中实现软删除 这是我的人际关系 Tournament hasMany CategoryTournament hasOne CategorySettings Tournament hasMany Category