سؤال حول تطوير تطبيق ويب باستخدام PHP & LARAVEL

السلام عليكم ورحمة الله

أنا تلميذ مبتدئ في تعلم php و Laravel لدي سؤال

أنا أحاول تطوير تطبيقات ويب صغيرة للتدرب ولكن أحتاج إلى جوب حول نقطة معينة

التطبيق الذي أحاول تطويره هو تطبيق لتسجيل ديون يحتوي على إسم المدين والمبلغ

ولكن في صفحة تفاصيل الديون أحتاج إلى طريقة جمع الديون في عمود المبلغ في قاعدة البيانات

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

باستطاعتك جمع الديون في عمود المبلغ في قاعدة البيانات باستخدام الاستعلام التالي:

SELECT SUM(amount) AS total_debt
FROM debts
WHERE debtor = 'اسم المدين';

حيث سيجمع جميع الديون من المدين الذي تم تحديده في اسم المدين، وسيخزن المبلغ الإجمالي في عمود total_debt، وبالتالي استخدم الاستعلام في صفحة تفاصيل الديون لعرض المبلغ الإجمالي للديون للمدين.

أيضًا يتوفر دالة SUM() في Laravel لجمع الديون، كالتالي:

use Illuminate\Support\Facades\DB;


// الحصول على المبلغ الإجمالي للديون للمدين
$totalDebt = DB::table('debts')
    ->where('debtor', '=', 'محمد')
    ->sum('amount');


// عرض المبلغ الإجمالي للديون
echo $totalDebt;

يمكن تنفيذ ذلك عن طريق مايلي

استخدام المعاملة المستمرة SUM() في الاستعلام:

$debts = DB::table('debts')->select(DB::raw('SUM(amount) as total'))->first();

جمع الديون في PHP: 

$total = 0;
foreach($debts as $debt) {
 $total += $debt->amount;
}

$total الآن سيحتوي على مجموع جميع المبالغ

الطريقة الأولى أفضل لأنها ستجمع المبالغ مباشرة في قاعدة البيانات، بينما الثانية ستجمعها في PHP.

لجمع الديون في عمود المبلغ في قاعدة البيانات، يمكنك استخدام الاستعلامات SQL لتحديث القيمة المخزنة في الجدول. في Laravel، يمكنك استخدام مثلا طريقة update في Eloquent لتحديث السجلات. اليك مثال بسيط:

في هذا المثال، سنفترض أن لديك نموذج يمثل الديون، واسمه Debt:

use Illuminate\Support\Facades\DB;

class DebtController extends Controller
{
  public function collectDebt($debtId)

  {
    // افترض أن لديك جدول يسمى debts ولديه عمود يسمى amount
    // احصل على الدين الذي تريد جمعه
    $debt = Debt::find($debtId);
    // تحديث قيمة عمود المبلغ في قاعدة البيانات
    DB::table('debts')->where('id', $debtId)->update(['amount' => 0]);
    // يمكنك أيضا استخدام Eloquent للتحديث
    // $debt->amount = 0;
    // $debt->save();
    return redirect()->back()->with('success', 'تم جمع الدين بنجاح');
  }
}

يرجى تغيير الأسماء والهياكل وفقا لتطبيقك الفعلي. يمكنك استخدام الكود أعلاه في وحدة التحكم (Controller) الخاصة بك وتعديله بما يتناسب مع تصميم قاعدة البيانات ونموذج الـ Eloquent الذي تستخدمه.

Adnane_Kadri أضف ردا

وعليكم السلام،

أظنك تحتاج إظهار مجموع الديون لمدين معين، بحيث يتم تجميع كل حقل مبلغ في كل صف للمدين المعني.

وفي لارافيل، يمكنك ذلك عن طريق التالي:

بفرض أن لديك انموذج بيانات يعبر عن الدين Debt، ويحتوي عمودين:

  • creditor_name، يعبر عن اسم المدين
  • amount، يعبر عن المبلغ

يعنى الاستعلام التالي بإظهار مجموع المبالغ للمدين المعني:

$totalAmount = Debt::where('creditor_name', 'اسم المدين')->sum('amount');

أو أبسط:

$totalAmount = Debt::whereCreditorName('اسم المدين')->sum('amount');

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

و هكذا عندما تريد الاستعلام عن دين لشخص ما تستطيع أن تحصل على قيمة ديونه الكلية مباشرة. و عندما تريد الاستعلام عن قيمة جميع الديون المقدمة للناس تستطيع استخدام احدى الطرق التي تم شرحها في التعليقات السابقة.

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

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