Skip to content

Commit 0707dcf

Browse files
committed
feat: #145 ForceDelete functionality added
1 parent 56d16b1 commit 0707dcf

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

src/SoftCascade.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ protected function getMorphManyData($relation, $foreignKeyIds)
193193
}
194194

195195
/**
196-
* Execute delete, or restore.
196+
* Execute delete or restore or forcedelete.
197197
*
198198
* @param Illuminate\Database\Eloquent\Relations\Relation $relation
199199
* @param string $foreignKey
@@ -211,7 +211,13 @@ protected function execute($relation, $foreignKey, $foreignKeyIds, $affectedRows
211211
$relationModel = $relationModel->whereIn($foreignKey, $foreignKeyIds)->limit($affectedRows);
212212

213213
$this->run($relationModel->get([$relationModel->getModel()->getKeyName()]));
214-
$relationModel->{$this->direction}($this->directionData);
214+
215+
// COMMIT : force delete when parent model "isForceDeleting = true"
216+
if ($this->isForceDeleting($relation)) {
217+
$relationModel->forceDelete();
218+
} else {
219+
$relationModel->{$this->direction}($this->directionData);
220+
}
215221
}
216222
}
217223

@@ -251,7 +257,12 @@ protected function validateRelation($model, $relation)
251257
protected function affectedRows($relation, $foreignKey, $foreignKeyIds)
252258
{
253259
$relationModel = $relation->getQuery()->getModel();
254-
$relationModel = $this->withTrashed($relationModel::query());
260+
$relationModel = new $relationModel();
261+
262+
// COMMIT : retreive relation trashed items when parent model "isForceDeleting = true"
263+
if ($this->direction !== 'delete' || $this->isForceDeleting($relation)) {
264+
$relationModel = $relationModel->withTrashed();
265+
}
255266

256267
return $relationModel->whereIn($foreignKey, $foreignKeyIds)->count();
257268
}
@@ -291,4 +302,15 @@ protected function withTrashed(Builder $builder): Builder
291302

292303
return $builder;
293304
}
305+
306+
/**
307+
* COMMIT
308+
* Check if parent has a force delete enabled
309+
* @return boolean
310+
*/
311+
protected function isForceDeleting($relation)
312+
{
313+
$parent = $relation->getParent();
314+
return property_exists($parent, 'forceDeleting') && $parent->isForceDeleting();
315+
}
294316
}

0 commit comments

Comments
 (0)