لدي بنية هرمية في قاعدة البيانات لمشروعي، بحيث يكون لكل حساب مستخدم حساب أب أو حساب ابن بشكل بنية هرمية متعددة المستويات.
فقمت بإنشاء المودل بالشكل التالي:
public function immediateChildAccounts()
{
return $this->hasMany('Account', 'acount_parent', 'act_id');
}
public function parentAccount()
{
return $this->belongsTo('Account', 'acount_parent', 'act_id');
}
وعندما أريد استعادة جميع سجلات الحسابات الأبناء لحساب معيّن أقوم بالتالي:
public function allChildAccounts()
{
$childAccounts = $this->immediateChildAccounts;
if (empty($childAccounts))
return $childAccounts;
foreach ($childAccounts as $child)
{
$child->load('immediateChildAccounts');
$childAccounts = $childAccounts->merge($child->allChildAccounts());
}
return $childAccounts;
}
ولكن مع ازدياد حجم البيانات لا أعلم إن كانت هذه الطريقة فعّالة في التعامل مع البنية الهرمية في لارافيل، حيث سأقوم بالمستقبل باستعادة جميع الحسابات الأبناء لحساب معيّن وأيضاً جميع أبنائهم وهكذا. كالتالي:
A->immediateChildAccounts() --> يجب أن أحصل على {B, C}
A->allChildAccounts() --> يجب أن أحصل على {B, D, C, E, F}
كما وأرغب أيضاً في استعادة جميع الحسابات التي ليس لها أبناء متصلة. ما هي الطريقة الأفضل لمعالجة هذه الأمور؟
السؤال
Amir Alsaeed
لدي بنية هرمية في قاعدة البيانات لمشروعي، بحيث يكون لكل حساب مستخدم حساب أب أو حساب ابن بشكل بنية هرمية متعددة المستويات.
فقمت بإنشاء المودل بالشكل التالي:
public function immediateChildAccounts() { return $this->hasMany('Account', 'acount_parent', 'act_id'); } public function parentAccount() { return $this->belongsTo('Account', 'acount_parent', 'act_id'); }
وعندما أريد استعادة جميع سجلات الحسابات الأبناء لحساب معيّن أقوم بالتالي:
public function allChildAccounts() { $childAccounts = $this->immediateChildAccounts; if (empty($childAccounts)) return $childAccounts; foreach ($childAccounts as $child) { $child->load('immediateChildAccounts'); $childAccounts = $childAccounts->merge($child->allChildAccounts()); } return $childAccounts; }
ولكن مع ازدياد حجم البيانات لا أعلم إن كانت هذه الطريقة فعّالة في التعامل مع البنية الهرمية في لارافيل، حيث سأقوم بالمستقبل باستعادة جميع الحسابات الأبناء لحساب معيّن وأيضاً جميع أبنائهم وهكذا. كالتالي:
A->immediateChildAccounts() --> يجب أن أحصل على {B, C} A->allChildAccounts() --> يجب أن أحصل على {B, D, C, E, F}
كما وأرغب أيضاً في استعادة جميع الحسابات التي ليس لها أبناء متصلة. ما هي الطريقة الأفضل لمعالجة هذه الأمور؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.