اذهب إلى المحتوى

Asem Mohamed

الأعضاء
  • المساهمات

    26
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو Asem Mohamed

  1. <?php namespace App\Jobs; use App\Models\Podcast; use App\Services\AudioProcessor; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; class ProcessPodcast implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. */ public function __construct( public Podcast $podcast, ) {} /** * Execute the job. */ public function handle(AudioProcessor $processor): void { // Process uploaded podcast... } } يمكنك هنا الاعتماد على Laravel queues أو ما يسمى بالطوابير حيث يتم بدأ الأمر وتنفيذه في الخلفية للسيرفر وتختار طريقة لاشعارك عند اكتمال العمل مثلا يرسل اليك بريد الكتروني عند انتهاء العميلة لكي تستخدم ال Laravel queues تاكد في ملف .env إن السطر QUEUE_CONNECTION=database قيمته database لكي تتخزن المهام في الطابور عن طريق الداتابيز ثانيا قم بانشاء process php artisan make:job ProcessPodcast يمكنك تسميتها كما تشاء ستجد الملف كالشكل الذي فوق اكتب المنطق البرمجي في دالة handle ولتشغيل الطابور استخدام php artisan queue:work
  2. استخدم ال Eloquent وليس الDB Builder لا حاجة هنا لاستخدامه أنشئ علاقة اولا بين الجدولين على سبيل المثال <?php class LinkedUser { public function users() { return $this->hasMany(User::class); } } ثم استخدم with عند جلب بيانات LinkedUser لستدعاء العلاقة users مثلا هنا استخدم <?php LinkedUser::with("users")->get(); ستكون النتيجة كل linkeduser مدمج معه الusres المرتبطين به
  3. يمكنك هنا تعديل ملف ال Model الخاص ب Classroom عن طريق اضافة Dynamic Property حيث يتم اضافة حقل جديد في البيانات التي ترجع اليك وكانها من قاعدة البيانات <?php class Classroom { public function getHasStudentsAttribute() { return (boolean)$this->has('students')->get()->count(); } } هنا انشأنا حقل جديد عن طريق دالة getHasStudentsAttribute وهي دالة عامة, بحيث الدالة تأخذ اسم مكون من 3 مقاطع 1- get لجلب حقل معين او set لكتابة قيمه بداخله 2- اسم الحقل هنا كان HasStudents 3- كلمة Attribute وبهذا عند عمل get للبيانات الخاصة ب classroom سيتم استعداء الحقل has_students بقيمة منطقية
  4. هل يظهر هذا الخطأ بمجرد عمل console log? الكود شغال عندي بدون مشاكل والسيرفر يدعم الاتصال لا حاجة للبروكسي
  5. لا يمكن الوصول إلى متغير داخل دالة من دالة أخرى ولكن يمكنك إرجاعه return أو عمل متغير global ووضع قيمة له من داخل الدالة بحيث تساوي قيمة المتغير الداخلي هنا ايضا يمكنك عمل دالة مستقلة تاخذ ال req.body وتحسب منه ال firstname وترجعه بحيث داخل ال route تنادي الدالة وتمرر لها الbody فقط
  6. لعمل هذا انت تحتاج أمر SQL شائع جدا وهو WHERE IN ويمكن تحقيقه ب لارافل عن طريق دالة whereIn حيث تجلب اي بيانات تتطابق مع اي من المصفوفة التي تممرها لها يمكنك اعادة كتابة الكود كالتالي <?php $categories = ['food', 'cars', 'technology']; $posts = Post::whereHas('categories', function($query) use ($categories) { $query->whereIn('category_name', $categories); })->get(); هنا عملنا جلب لاي بوست له علاقة مع الجدول categories ثم انشأنا query لعمل whereIn حيث نجلب اي post له علاقة مع category يكون اسمه احد الاسماء المعدة سلفا في المصفوفة
  7. يجب عليك أن تربط مجلدات public و storage\app\public\uploads لان لارفل لا يستطيع التعامل مع المجلدين على أنهم مجلد واحد إلا بعد عمل ما يسمى ب link بين المحلدات وهو أمر موجود اساسا داخل أنظمة التشغيل ويستخدمه لارفل ولاتمام ذلك اكتب في سطر الاوامر terminal php artisan storage:link
  8. يجب استرداد ال id أيضا دائما في أي علاقة فهو ضروري لعمل العلاقة اصلا حاليا انت تجلب عنوان البوست لكن بدون ال id لارفل لا يستطيع تكوين العلاقة اصلا
  9. هل يمكن استخدام مصطلحات برمجية للفهم ما معنى تهجير
  10. استاذي الفاضل يجب أن تستخدم get في نهاية السطر لان الدوال المكتوبة ترجع اوبجكت من ال eleqouent وليس الداتا نفسها
  11. يمكنك استخدام eager loading باستخدام دالة withMin <?php $products = Product::select("id", "name") ->withMin('variants', 'price') ->get() ->toArray(); حيث ترجع هذه الدالة مع كل منتج اقل سعر في ال variants حيث تأخذ دالة withMin اول بارامتر هو اسم العلاقة والثاني هو اسم الحقل حيث ترجع القيمة هكذا تقرييبا (تجريبي) Array ( [0] => Array ( [id] => 1 [name] => Mobile [varinats_min_price] => 110 ) [1] => Array ( [id] => 2 [name] => Laptop [varinats_min_price] => 205 ) )
  12. الخطأ يظهر ان المشكلة في الملف index.php في المسار C:\laragon\www\sprii\public\index.php فتأكد من وجود الملف وانه لم يتم حذفه بشكل خاطئ الخطأ الثاني الملف اسمه C:/laragon/www/sprii/app\Http\Controllers\Api\V1\TwoFactorApiController.php وتم عمل use له بهذا الشكل App\Http\Controllers\api\v1\TwoFactorApiController وقواعد الpsr4 تنص على انه يجب ان تكون الكلمات تبدأ بحروف كبيرة ومثل ما تم تسميتها بدل سطر use بهذا السطر use App\Http\Controllers\Api\V1\TwoFactorApiController; بدلا من use App\Http\Controllers\api\v1\TwoFactorApiController;
  13. بداية يجب ان يتم الlogic داخل المتحكم وليس الmodel فهذا افضل بكثير 1- في لارفل عند مقارنة تاريخين لا نستعمل where ولكن نستعمل whereDate 2- <?php use Carbon\Carbon; $current_timestamp = Carbon::now()->timestamp; // Produces something like 1552296328 //بدلا من freshTimestamp 3- لم أجد استعداء لميثود total والتي تحسب اساسا القيم التي تريدها فانت في ميثود store تستدعي ميثود timeIn هنا تم حفظ وقت الدخول وفي ميثود update تستدعي ميثود timeOut هنا تم حفظ وقت الخروج لا يوجد استدعاء للميثود total لانها هي من تنفذ عملية حساب الوقت الاجمالي للحضور يمكنك استخدام ميثود total بطريقيتن عمل route ينفذ الميثود <?php Route::get("/calcTotal",function(Request $req){ $req->user()->total() }); او استخدام الevents, عند تحديث الtimeOut يتم تنفيذ ميثود total تلقائيا, وهذا رابط من شرح لارفل يشرح كيفية استخدام الEvents داخل الModels https://laravel.com/docs/10.x/eloquent#events
  14. اخي الفاضل يمكنك استخدام دالة تقوم بعملية الفلترة وترجع القائمة هنا في هذا الكود استخدمت ال text input لتسهيل الشرح ويمكنك استخدام المبدأ على اي شيء بعدها تم جلب البيانات من الapi في useEffect وتقوم بعمل تحديث للstate المسمى list عن طريق updateList وعند عمل تغيير في قيمة البحث (او ال checkbox) يتم تحديث قيمة الstate المسمى filter داخل الدالة المسؤولة عن التجاوب مع حدث التغيير handleSearch وفي دالة searching يتم النظر في قيمة الfilter اذا كانت لها قيمة (او selected) يتم فلترة القائمة واعادة الlist الجديدة اما اذا لم يكن هناك فلتر محدد فيتم ارجاع القائمة الاصلية ويتم عمل map على القيمة المرجعة من دالة searching لاحظ استعمال التعبير cardsList?.map باستخدام ? حيث تنبه الكود انه اذا كانت القائمة فارغة فلا يطبق عملية الmap (في حالة لم يتم جلب البيانات او كانت البيانات فارغة اصلا) import React, { useEffect, useState } from 'react'; import css from './App.module.css'; import axios from 'axios'; const Card = ({id, credit_card_type, credit_card_expiry_date, credit_card_number}) => { return ( <div className={css.card}> <h4>{credit_card_type}</h4> <p>{credit_card_number}</p> <strong>{credit_card_expiry_date}</strong> </div> ); }; function App() { const [filter, setFilter] = useState(''); const [list, updateList] = useState(null); useEffect(() => { const getCards = async () => { const response = await axios.get("https://random-data-api.com/api/v2/credit_cards",{ params:{ size:10 } }) updateList(response.data) } getCards(); },[]); const handleSearch = (e) => { setFilter(e.target.value); } const searching = () => { if(filter){ return list.filter(item => item.credit_card_type.toLowerCase().includes(filter.toLowerCase())); } else { return list; } } const cardsList = searching(); const cards = cardsList?.map(item => ( <Card key={item.id} {...item} /> )); return ( <> <input type="search" placeholder="Search" onChange={handleSearch} value={filter} /> <div className={css.container}> {cards} </div> </> ); } export default App;
  15. اخي الكريم ستجد في هذه الصورة مقارنة جيدة جدا للإطارين اهم ما يمكن ملاحظته هو: الأداء: ستجد ان react native قريب جدا من أداء التطبيقات ال native اما flutter فهو قوي الى حد ما لكن لم يقترب من react native وبالطبع ولا الnative نفسه التحديث: عندما تنشر تحديث لتطبيق مصمم باستخدام الإطارين, سيتم تحديث التطبيق react native مجرد ان يفتح المستخدم التطبيق ويتصل بالانترنت, اما flutter فيجب تنزيل التحديث من متجر التطبيقات, وحاليا يتم العمل من قبل فريق flutter على ادخال هذه الميزة لكن يتم حتى الان الواجهة الرسومية: تجد ان react native يستخدم مكونات النظام الأصلية Native ولا يستخدم مكونات هجينة لبناء الواجهة
  16. يوفر Laravel دوال خاصة لإجراء الشروط على العلاقات مثلا whereHas ,whereRelation, doesntHave, whereDoesntHave فمثلا في حالة الكود الذي كتبته يمكنك اعادة كتابته كالتالي <?php $availableLands = Land::whereRelation('stage', 'name', 'like', "%".$this->search."%")->get(); ?> هنا تم استخدام دالة whereRelation وهي شكل مختصر في الاصدارات الحديثة من لارافل لاجراء الشروط على العلاقات وتأخذ متغيراتها كالآتي: 1- اسم العلاقة 2- اسم الحقل في قاعدة البيانات 3- الإجراء (=, >, < , like, ) الخ 4- القيمة التي يقارن بها الحقل
  17. يمكنك استخدام دالة number_format على النحو الآتي <?php number_format(45.454646,2); //first paramter = number //second paramter = digits ?> الدالة تأخذ متغيرين الأول وهو الرقم الذي تريد اجراء التعديل عليه والثاني هو عدد الأرقام التي تريدها بعد العلامة العشرية
  18. يمكنك استخدام الموقت الزمني لكي تجعل الكود كل فترة معينة ينظر اذا كان هناك سجل جديد في قاعدة البيانات وذلك باستخدام دالة setInterval const timer = setInterval(() => { //ajax code here },1000); التي تأخذ الكود الذي تريد تنفيذه كل فترة معينة ك بارامتر أول والزمن الذي تريد اعادة تشغيل الكود بعده ك بارامتر ثاني هنا مثلا تم وضع 1000 يعني 1 ثانية, حيث يقاس الزمن بوحدة المللي ثانية, 1000 مللي ثانية = 1 ثانية يوجد طرق أخرى مثل تقنية Server Sent Events SSE او استخدام Websocket لكن هذه الطريقة هي الابسط والاسهل
  19. هناك مشكلة في مسار الصورة ./assets/adaptive-icon.png تأكد ان المسار صحيح ايضا لترقية الsdk استخدم expo upgrade وهذا رابط مفصل للترقية ترقية
  20. طريقتك سليمة, لكن هذه الطريقة تعمل باستخدام vanilla javascript يعني بدون استخدام اي مكتبات الطريقة الأخرى باستخدام jquery <script> $(document).ready(function(){ $("button").click(function(){ $("p").removeClass("intro"); }); }); </script> عن طريق دالة removeClass
  21. اهلا اخي الفاضل دالة json_decode ترجع القيم مباشرة ولا تحتاج ان تنادي data مباشرة: $decoded->MatchingTables هذا اول خطأ الخطأ الثاني ان MatchingTables هي عبارة عن مصفوفة فيجب ان تختار index اولا من مصفوفة MatchingTables ثم تدخل إلى RoundNumber مثلا $roundNumber = $decoded->MatchingTables[0]->RoundNumber;
  22. السلام عليكم فهمت من الموضوع انه حاليا يكون الزر غير مفعل وعندما يصل عدد السجلات الى 5 يتم تفعيل الزر ولكن المشكلة انه الان عند تفعيل الزر وعدد السجلات لم يصل إلى 5, يتم اكمال عملية الحفظ بدون تحقق, هل هذا صحيح؟
×
×
  • أضف...