هل يعرف Propel متى يتم حذف كائن ، بحيث لا يزال بإمكان كيانات الأطفال إظهار الوالدين المحذوفين؟

StackOverflow https://stackoverflow.com/questions/2519297

  •  22-09-2019
  •  | 
  •  

سؤال

أنا كائنات حذف ناعمة في قاعدة بيانات MySQL واستخدام ORM Propel. لقد حصلت على حذف ناعم للعمل ، ولكن على حساب فقدان علاقاتي الوالدية والطفل القسري ، حيث لا يتم حذف الصفوف الفعلية.

هل هناك أي طريقة للدفع لمعرفة أن السجل قد تم حذفه الناعم عند الوصول إليه ، بحيث لا يتم إلقاء استثناء مرجع فارغ؟ بهذه الطريقة ، على الرغم من حذف أحد الوالدين ، لا يزال طفله لا يزال بإمكانه قرأ إنها علاقة ، لكن متى تحديث طفل ، أو خلق طفل جديد ، لا يمكن الوصول إلى الوالد المحذوف.

فمثلا،

يحتوي الكتاب على مؤلف ، وإذا كان المؤلف الذي ينتمي إلى المؤلف محذوفًا ، ثم:

$book->getAuthor();

سيعود المؤلف الصحيح (لعرض أغراض فقط). ومع ذلك ، إذا تمت إضافة كتاب جديد ، فإن المؤلف الذي تم حذفه اللينة غير متاح للاختيار.

هل يعرف أي شخص ما إذا كانت هذه الوظيفة مدمجة في دفع؟

هل كانت مفيدة؟

المحلول

الحذف الناعم هو تجريد مكسور. يجب عليك استخدام السلوك القابل للأرشيف بدلاً من ذلك (انظر لماذا في مدونة Propel: http://propelorm.org/blog/2011/08/29/introducing-archivable-behavior-and-why-soft-delete-is-deprecated.html)

نصائح أخرى

لست متأكدًا من سبب السماح للمؤلف بحذفه ، لكن أعماله لن (أو ، في الأساس ، سبب ظهور هذا كسيناريو في مشروعك) ولكن يمكنك إنشاء معايير مخصصة وتنفيذها. يعتمد الرمز التالي على إصدار Propel الذي تستخدمه (لكن المفهوم يظل كما هو):

$c = new Criteria();
$c->getNewCriterion(self::AUTHOR_ID, $parentId);
return self::doSelect($c, $connection);

عثرت فقط عبر هذا السؤال. يبدو أنه سيكون من المنطقي عدم استخدام الحذف الناعم للوظائف التي تصفها. أود أن أنصح بشدة أن تقوم بإنشاء حقل للإعلام بما إذا كان المؤلفون قد تم تمكينه ، أي حقل منطقي يسمى isenabled.

يمكنك بعد ذلك استخدام طريقة التصفية التي تم إنشاؤها لفئة المؤلف ، في هذه الحالة

AuthorQuery::create->filterByisEnabled()
                   ->find();

إذا كان الكائن لا يزال سيتم استخدامه في التطبيق ، فليس من المناسب حقًا حذفه. وظائف الحذف الناعمة هي فقط للرجوع إليها أو إعادة الأخطاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top