删除()或forceDelete()。确定的更好方法

时间:2019-01-10 08:38:10

标签: php mysql database laravel eloquent

我有一个包含95个表的数据库。 users表存在于系统用户。许多其他表(95个表中的45个表)都有一个“ created_by”,它表示通过users.id创建/添加了该行的用户。

现在。如果我想删除一个用户,我只是无法去做$user->delete(),我需要让该用户保持(软删除它),以防该用户在其他表上创建了行。但是,如果该用户没有添加任何内容,那我应该继续$user->forceDelete()

我的问题是:是否有一个很好的方法可以做到这一点?当我们拥有大量表时,要检查是否应删除用户或强制删除用户。

我认为我可以循环遍历表并检查是否存在要删除的用户ID,如果找到,则为-> delete(),否则为-> forceDelete()。这是代码:

            // Get all tables
            $allTables = \DB::connection()->getDoctrineSchemaManager()->listTableNames();
            $tablesWithCreatedBy = [];
            foreach($allTables as $tableName){
                $tableColumns = \DB::getSchemaBuilder()->getColumnListing($tableName);

                if(in_array('created_by', $tableColumns)){
                    $tablesWithCreatedBy[] = $tableName;
                }
            }

            foreach($tablesWithCreatedBy as $tableName){
                $result = \DB::select(" SELECT created_by FROM `$tableName`
                    WHERE `created_by` = {$this->user->id} LIMIT 0, 1 ");

                if(isset($result[0])){
                    $this->user->delete();
                    break;
                }
            }

            // If wasn't trashed from the code above, then force delete the user!
            if(!$this->user->trashed()){
                $this->user->forceDelete();
            }

我觉得必须有更好的方法!有吗?

1 个答案:

答案 0 :(得分:2)

您必须向records_count表中添加users,每次用户向其他表中添加内容时,该表都会增加,因此更改解决方案将很简单:

$result = ($this->user->records_count > 0) 
          ? $this->user->delete() 
          : $this->user->forceDelete(); 

或者编写Laravel控制台命令并在后台运行它,它将遍历数据库并执行清理操作。