احمد مصطفى14 نشر 23 يونيو 2022 أرسل تقرير نشر 23 يونيو 2022 $time = Carbon::now()->month; @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) كيف يمكننى استخراج ال transactions الخاصه بهذا الشهر فقط هذا الكود لا يخرج لي اي بيانات كلها null مع العلم انه يوجد بيانات في Database 1 اقتباس
0 Adnane Kadri نشر 23 يونيو 2022 أرسل تقرير نشر 23 يونيو 2022 يوجد في الحقيقة في لارافيل تابع يدعى whereMonth يمكن من عليه تحديد مدخلات شهر ما، فعلى سبيل المثال: $transactions = Transaction::whereMonth('created_at', '09') ->get(); سيقوم بجلب كامل التحويلات التي تم انشاءها في شهر 9 الموافق لسبتمبر. بنفس المنطق سيمكنك ايضا استعمال التابع الآخر whereYear مع whereMonth لجلب مدخلات الشهر المرفق بالعام المرفق. يعني: هذا الشهر. يكون ذلك كـ: $transactions = Transaction::whereMonth('created_at', '09') ->whereYear('created_at', '2022') ->get(); يمكنك جعل العملية ديناميكية عن طريق الدالة المساعدة now والتي تقوم بانشاء نسخة عن الصنف "Illuminate\Support\Carbon" في الوقت الحالي: $currentYear = now()->year; $currentMonth = now()->month; $transactions = Transaction::whereMonth('created_at', $currentMonth) ->whereYear('created_at', $currentYear) ->get(); بذات المنطق يمكنك تطبيقها على التحويلات الخاصة بالشهر لديك. 1 اقتباس
0 احمد مصطفى14 نشر 23 يونيو 2022 الكاتب أرسل تقرير نشر 23 يونيو 2022 (معدل) لقد قمت بعمل ذلك Route::get('/monthly', function () { $time = Carbon::today(); $operation = DoctorProject::with('transactions', 'doctor:id,name', 'project:id,name')->whereHas('transactions', function ($query) { return $query->whereMonth('created_at', '06'); },)->get(); return view('monthly', [ 'operation' => $operation, 'time' => $time ]); })->middleware('auth'); في هذا الكود يظر لنا الProjects التي اضفنا لها transactions في شهر 6 ولكن @foreach ($operation as $op ) @if($op->doctor->id == 1) <h5> <label><img src="/images/Arrow.svg" alt="clock"></label> اســـــم الـحــالــه -> <a href="projects/{{ $op->project->id }}">{{ $op->project->name }}</a> </h6> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> <?php $sum+= $o->payed; ?> </h6> @endforeach @endif @endforeach في هذا الكود نريد اظهار الtransactions نفسها اللتى تمت في شهر 6 عن طريق created_at المخرنه في قاعدة البيانات تم التعديل في 23 يونيو 2022 بواسطة أحمد مصطفى كامل 1 اقتباس
0 Adnane Kadri نشر 23 يونيو 2022 أرسل تقرير نشر 23 يونيو 2022 بتاريخ 28 دقائق مضت قال أحمد مصطفى كامل: في هذا الكود يظر لنا الProjects التي اضفنا لها transactions في شهر 6 ولكن @foreach ($operation as $op ) @if($op->doctor->id == 1) <h5> <label><img src="/images/Arrow.svg" alt="clock"></label> اســـــم الـحــالــه -> <a href="projects/{{ $op->project->id }}">{{ $op->project->name }}</a> </h6> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> <?php $sum+= $o->payed; ?> </h6> @endforeach @endif @endforeach في هذا الكود نريد اظهار الtransactions نفسها اللتى تمت في شهر 6 عن طريق created_at المخرنه في قاعدة البيانات هل حاولت استعمال التابع whereMonth هنا أيضا؟ مثلا: $op->transactions->whereMonth('created_at', now()->month )->get() لا تنسى تنفيذ الاستعلام عن طريق التابع get. يحتمل ان يكون هو مسبب المشكلة التي تحاول تفاديها: اقتباس هذا الكود لا يخرج لي اي بيانات كلها null مع العلم انه يوجد بيانات في Database كملاحظات أخرى، من غير المقترح كتابة استعلامات قواعد بيانات في مكان غير النماذج Models. فهو تطبيق غير جيد ويضفي على الشيفرة الكثير من مشاكل عدم قابلية التوسع والقراءة ونظافة الشيفرة وغيرها. ان كنت تحاول جلب التحويلات الخاصة بعملية ما في هذا الشهر فسيكفيك تعريفها ضمن ملف النموذج واستعمالها بشكل عادي في ملف العرض: class Operation extends Model { .. public function transactionsOfThisMonth() { return $this->transactions->whereMonth('created_at' ,now()->month)->get(); } } ثم سيسعك استعمالها بشكل عادي كـ: @foreach($op->transactionsOfThisMonth() as $t ) ثالثا، لما تقوم بوضع الشيفرة كاملة داخلة عبارة شرطية if، لما لا تستعمل فقط متغير القالب continue الذي سيتحقق من الشرط في كل حلقة من التكرار ويجعل التكرار يستمر في حالة تحقق الشرط وفقط؟ @foreach ($operation as $op ) @if($op->doctor->id == 1) @continue @endif <h5> <label><img src="/images/Arrow.svg" alt="clock"></label> اســـــم الـحــالــه -> <a href="projects/{{ $op->project->id }}">{{ $op->project->name }}</a> </h6> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> <?php $sum+= $o->payed; ?> </h6> @endforeach @endforeach نفس الشيء بالنسبة للمتغير sum، افترض أنك تقوم بتجميع كامل المبالغ المدفوعة وتعرض هذا المجموع بطريقة ما، صحيح؟ <?php $sum+= $o->payed; ?> لا يفترض ان تحمل ملفات العرض اي منطق من هذا الشكل. لما لا نقوم مثلا بتعريف تابع ما يقوم بكل هاته العملية من اجلنا. نقوم بتجميع كامل قيم payed من تحويلات هذا الشهر، ثم نطبق الوظيفة array_sum لحساب هذا المجموع. class Operation extends Model { .. public function sumOftransactionsOfThisMonth() { return array_sum( $this->transactionsOfThisMonth()->pluck('payed') ); } } لاحظ أننا استعملنا وظيفتنا السابقة. ثم سيمكننا استدعاء هاته الوظيفة اينما شئنا كـ: @foreach ($operation as $op ) {{ $op->sumOftransactionsOfThisMonth() }} ناتج الشيفرة: @foreach ($operation as $op ) @if($op->doctor->id == 1) @continue @endif <h5> <label> <img src="/images/Arrow.svg" alt="clock"> </label> <a href="projects/{{ $op->project->id }}"> {{ $op->project->name }} </a> </h5> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> </h5> @endforeach @endforeach 1 اقتباس
0 احمد مصطفى14 نشر 23 يونيو 2022 الكاتب أرسل تقرير نشر 23 يونيو 2022 (معدل) بتاريخ 14 دقائق مضت قال Adnane Kadri: هل حاولت استعمال التابع whereMonth هنا أيضا؟ مثلا: $op->transactions->whereMonth('created_at', now()->month )->get() لا تنسى تنفيذ الاستعلام عن طريق التابع get. يحتمل ان يكون هو مسبب المشكلة التي تحاول تفاديها: كملاحظات أخرى، من غير المقترح كتابة استعلامات قواعد بيانات في مكان غير النماذج Models. فهو تطبيق غير جيد ويضفي على الشيفرة الكثير من مشاكل عدم قابلية التوسع والقراءة ونظافة الشيفرة وغيرها. ان كنت تحاول جلب التحويلات الخاصة بعملية ما في هذا الشهر فسيكفيك تعريفها ضمن ملف النموذج واستعمالها بشكل عادي في ملف العرض: class Operation extends Model { .. public function transactionsOfThisMonth() { return $this->transactions->whereMonth('created_at' ,now()->month)->get(); } } ثم سيسعك استعمالها بشكل عادي كـ: @foreach($op->transactionsOfThisMonth() as $t ) ثالثا، لما تقوم بوضع الشيفرة كاملة داخلة عبارة شرطية if، لما لا تستعمل فقط متغير القالب continue في حالة تحقق الشرط وفقط؟ @foreach ($operation as $op ) @if($op->doctor->id == 1) @continue @endif <h5> <label><img src="/images/Arrow.svg" alt="clock"></label> اســـــم الـحــالــه -> <a href="projects/{{ $op->project->id }}">{{ $op->project->name }}</a> </h6> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> <?php $sum+= $o->payed; ?> </h6> @endforeach @endforeach نفس الشيء بالنسبة للمتغير sum، افترض أنك تقوم بتجميع كامل المبالغ المدفوعة وتعرض هذا المجموع بطريقة ما، صحيح؟ <?php $sum+= $o->payed; ?> لا يفترض ان تحمل ملفات العرض اي منطق من هذا الشكل. لما لا نقوم مثلا بتعريف تابع ما يقوم بكل هاته العملية من اجلنا. نقوم بتجميع كامل قيم payed من تحويلات هذا الشهر، ثم نطبق الوظيفة array_sum لحساب هذا المجموع. class Operation extends Model { .. public function sumOftransactionsOfThisMonth() { return array_sum( $this->transactionsOfThisMonth()->pluck('payed') ); } } لاحظ أننا استعملنا وظيفتنا السابقة. ثم سيمكننا استدعاء هاته الوظيفة اينما شئنا كـ: @foreach ($operation as $op ) {{ $op->sumOftransactionsOfThisMonth() }} ناتج الشيفرة: @foreach ($operation as $op ) @if($op->doctor->id == 1) @continue @endif <h5> <label> <img src="/images/Arrow.svg" alt="clock"> </label> <a href="projects/{{ $op->project->id }}"> {{ $op->project->name }} </a> </h5> @foreach ($op->transactions->where('created_at', '=', $time ) as $o ) <h5> {{-- <label><img src="/images/money.svg" alt="clock"></label> --}} 💵 المبلع المدفوع :<span> EGP {{ $o->payed }}</span> </h5> @endforeach @endforeach تم حل المشكله الحل كان يجب ازاله الشرط ->where('created_at', '=', $time ) وتحديد الشهر من $query رغم بساطه الحل الا اننى اضعت وقت كثير فيها مازلنا في بدايات التعلم اشكرك على المعلومات والملاحظات وساعمل على تطبقها شكرا لك تم التعديل في 23 يونيو 2022 بواسطة أحمد مصطفى كامل 1 اقتباس
السؤال
احمد مصطفى14
كيف يمكننى استخراج ال transactions الخاصه بهذا الشهر فقط
هذا الكود لا يخرج لي اي بيانات كلها null مع العلم انه يوجد بيانات في Database
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.