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

Adnane Kadri

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

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

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

  • عدد الأيام التي تصدر بها

    52

كل منشورات العضو Adnane Kadri

  1. يوجد في الحقيقة في لارافيل تابع يدعى 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(); بذات المنطق يمكنك تطبيقها على التحويلات الخاصة بالشهر لديك.
  2. قبل محاولة التحديث ينبغي معرفة ان لارافيل تصنف أربع مستويات من التأثير توصف دوما بجانب أدلة التحديث: Low وهو المستوى الاقل تأثيرا، ويشمل الأجزاء التي لها احتمالية ضئيلة للفشل في حالة عدم تحديثها. قد تسبب ظهور تنبيهات مثل تنبيهات إهمال سياق، تابع او وظيفة ما deprecation warning medium: الأجزاء التي لها امكانية تسبيب بعض المشاكل الغير جدية (مشاكل ضئيلة التأثير). Optional: لا تؤثر، ولكن مستحسنة High: تؤثر بشكل كبير وقد تسبب مشاكل جذرية في المشروع. بحسب دليل التحديث، فإنك ستحتاجين أولا تحديث نسخ كل من اعتماديات composer التالية: guzzlehttp/guzzle إلى ^7.0.1 facade/ignition الى ^2.3.6 laravel/framework الى ^8.0 في حال ما كنت تستعملين laravel/ui فيجب عليك ترقيتها هي الأخرى الى ^3.0 nunomaduro/collision الى ^5.0 phpunit/phpunit الى ^9.0 ثم كتحديث عال التأثير، يجب تحديث فضاءات أسماء namespaces الخاصة بمعامل النماذج model factories ومنشئات البذرة seeders ويشمل ذلك: اعادة تسمية مجلد seeds ليصبح seeders حقن فضاءات الاسماء في ملفات ال seeders وال factories الخاصة بك: <?php namespace Database\Seeders; use App\Models\User; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { ... } } تحديث خريطة فضاءات الاسماء في ملف composer.json باضافة الفضائين السابقين: "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, أغلب التحديثات الموصوفة الأخرى هي تحديثات ضئيلة التأثير، اختيارية او نادر العمل بها (مثل تصفيح bootstrap). يفترض ان يعمل لارافيل الآن لديك وفق النسخة 8 بشكل طبيعي.
  3. ما هي نسخ مشاريع لارافيل التي لديك؟
  4. هل تظهر اي رسائل اخطاء بنافذة الطرفية console عند استعراض المشروع من المتصفح؟
  5. هل السؤال متعلق بدورة ما؟ يفضل ارفاق السؤال ضمن قسم تعليقات الطلبة اسفل الفيديو الذي تواجه به المشكلة. وإلا فإنك ستحتاج ارفاق مزيدا من التفاصيل، مثل نص رسالة الخطأ التي تظهر، ومحتوى ملف اعداد ويب باك webpack.config.js
  6. هل تقصد دورة تطوير تطبيقات الجوال باستخدام تقنيات الويب؟ عل كل، يمكنك التواصل مع الدعم بهذا الخصوص.
  7. ليس لارافيل إلا مثالا موسعا عن ما يتم تقديمه في مسار أساسيات PHP في دورة تطوير التطبيقات باستخدام PHP، فهذا الأخير يتعرض لمفهوم المتحكمات، التوجيه، ملفات العرض، باني الاستعلامات وغيرها. كل هاته المكونات يستعملها لارافيل بطريقة ما ليكون بهذا الشكل وهاته الوظيفية. بمعنى أن العمل على لارافيل لم يكن إلا بعد التفصيل في جزئيات العمل به وبعد استيضاح مكوناته. يمكنك في الحقيقة العمل بما تعلمته في المسار الأول على مشاريع كبيرة، ولكن لا يتوقع ان يكون ذلك بنفس السرعة والجودة التي هي عليها ذات التطبيق لو كان على لارافيل. لا يعني هذا لارافيل وفقط، ولكن العمل به يجنبك الكثير من التكرارات التي تصادفها. يمكنك انت نفسك انشاء اطار عمل مصغر وسيعطيك نفس الامتياز. فلارافيل ليس الا PHP نفسها وليس اي شيء آخر. وسبب التركيز عليه هو فقط لهيمنته على المجال لا غير.
  8. أسفل أي فيديو من فيديوهات الدورات. في أسفل القسم تماما سيمكنك ايجاد حقل لإرفاق تفاصيل سؤال او مشكلة تواجهها.
  9. يمكنك طلب ذلك في قسم تعليقات الطلبة وسيقوم مدربوا الأكاديمية بمراجعته وتقييمه لك وتوجيهك.
  10. يفترض أن يراجع معك المدرب المشروع الذي أنجزته، قم بمراسلة الدعم بشأن الامتحان اقرأ اكثر عن الامتحان والحصول على الشهادة
  11. لإنشاء مدخل جديد في الجدول الوسيط في علاقات Many to Many في لارافيل، يمكن استعمال التوابع attach و detach كالتالي: $project = Project::first(); $doctor = Doctor::first(); $project->doctors()->attach($doctor->id); // لإضافة دكتور جديد لمجموعة الدكاترة الخاصة بمشروع ما $project->doctors()->detach($doctor->id); // لإزالة دكتور ما من مجموعة الدكاترة الخاصة بمشروع ما وبالطبع فان نفس الأمر يمكن فعله مع الجدول الآخر: $doctor = Doctor::first(); $project = Project::first(); $doctor->projects()->attach($project->id); // لإضافة مشروع جديد لمجموعة المشاريع الخاصة بدكتور ما $doctor->projects()->detach($project->id); // لإزالة مشروع من مجموعة المشاريع الخاصة بدكتور ما يمكنك ايضا اسناد او ازالة مجموعة من العناصر الى التابعين، ففي حال ما كنت تحاول مثلا اضافة مجموعة من المشاريع لدكتور معين دفعة واحدة يمكنك ذلك عن طريق: $doctor = Doctor::first(); $projects = Project::inRandomOrder()->limit(10)->pluck('id'); // مجموعة عشوائية من المشاريع $doctor->projects()->attach($projects); // لإضافة مجموعة مشاريع جديدة لمجموعة المشاريع الخاصة بدكتور ما انتبه الى انه في حالة عدم تمرير اي معاملات الى التابع detach سيتم محو كامل الاسطر الوسيطة في الجدول الوسيط الخاصة بالعنصر المشار اليه: $doctor = Doctor::first(); $doctor->projects()->detach(); // محو كامل العلاقات او: $project = Project::first(); $project->doctors()->detach(); // محو كامل العلاقات
  12. سؤالك يفتقر الى التفاصيل اكثر، هل يمكنك ارفاق شيفرة ال html أيضا. هل يمكنك التقاط فيديو قصير او ارفاق مثال عملي عن السلوك الذي يحدث؟
  13. اظنك تحاول انشاء علاقة Many to Many بين جدولي doctors و projects. لفعل هذا نقوم في لارافيل بانشاء جدول وسيط مثل الذي تقوم به في phpmyadmin ثم عن طريق تعريف توابع العلاقات في ملفات النماذج المرافقة للجدولين بجلب مشاريع دكتور معين أو دكاترة مشروع معين. لنقم اولا عن طريق الامر: php artisan make:migration doctor_project لانشاء الجدول الوسيط. الآن سنحتاج تعريف طرفي العلاقة Many to Many في ملفات كل نموذج: في ملف Project.php : class Project extends Model { /** * .. */ public function doctors() { return $this->belongsToMany(Doctor::class); } } في ملف Doctor.php: class Doctor extends Model { /** * .. */ public function projects() { return $this->belongsToMany(Project::class); } } الآن تأكد من تهجير قواعد البيانات عن طريق: php artisan migrate ثم سيمكنك استدعاء ناتج اي من العلاقتين عن طريق القراءة من التابع projects او doctors: $doctor = Doctor::first(); dd($doctor->projects); $project = Project::first(); dd($project->doctors); يمكنك الاستفادة من هاته الاجابات ايضا عن ذات العلاقة.
  14. يمكنك استعمال موقع مستقل لتوظيف مطور برمجيات يمكنه العمل على مشروعك.
  15. مثلما أشار المدرب عمر، فإن رسالة التنبيه تظهر بسبب ان خاصية scroll-behavior غير مدعومة من قبل متصفحات safari. ولتجاوز هذا المشكل ومقاربة نفس سلوك الانزلاق في هاته المتصفحات التي لا تدعم هاته الخاصية نقوم بعمل ذلك عن طريق الجافاسكربت. في جيكويري مثلا يوجد الخاصية scrollTop ضمن التابع animate : $('html, body').animate({ scrollTop: $('#target-item').offset().top }, 800}) حيث يعبر : target-item على معرف id للعنصر او الحاوي المستهدف الذي نحاول الانزلاق اليه. 800 مدة هاته الحركية. او مدة الانزلاق يمكنك مثلا اضافة هاته الشيفرة ضمن وظيفة ما نربطها بحدث الضغط على رابط او زر ما يقوم بالانزلاق بنا الى عنصر آخر. <script> function smothlyScroll(target) { $('html, body').animate({ scrollTop: $(target).offset().top }, 800}) } </script> <button onclick="smothlyScroll('#about-section')">scroll to about section</button> <section id="about-section"> .. </section>
  16. يمكنك اقتصاص الكلمات التي تحتوي الجزء المبحوث عنه من السلسلة النصية الأصلية التي تعبر عن عنوان المنتج. نتبع في ذلك الخطوات التالية: تجزئة نتائج البحث او العناوين الى كلمات. التحقق من احتواء كل كلمة على الجزء المبحوث عنه ثم اضافتها الى مصفوفة نتائج طباعة مصفوفة النتائج يكون ذلك وفق منطق مشابه: $searchRslt = $stmt3->fetchAll(); // حقن نتائج البحث في متغير $search= $_GET['sentSearch']; // حقن الكلمة المفتاحية في سلسلة نصية $suggestions = []; foreach($searchRslt as $result){ $words = explode(' ',$result); // توزيع كلمات العنوان في مصفوفة // البحث عن الجزء المبحوث عنه في كل كلمة من كلمات العنوان foreach($words as $word){ if(preg_match("/{$search}/i", $word)){ // في حالة احتواء الكلمة على الكلمة المفتاحية array_push($suggestions ,$word); // اضافتها الى مصفوفة الاقتراحات } } } الآن لو حاولت طباعة المصفوفة suggestions فسترى ان كل من عناصرها يحتوي الجزء المبحوث عنه. سيمكنك بهذا تشكيل مجموعة من الكلمات المفتاحية او الوسوم. يمكنك تنظيم العملية أكثر عن طريق فصل كل جزئية كـ: $searchRslt = $stmt3->fetchAll(); // حقن نتائج البحث في متغير $search= $_GET['sentSearch']; // حقن الكلمة المفتاحية في سلسلة نصية $suggestions = []; foreach($searchRslt as $result){ $suggestions = array_merge( $suggestions , getMatchedWordsFromString($result ,$search) ); } function getMatchedWordsFromString($result ,$search) { $words = explode(' ',$result); // توزيع كلمات العنوان في مصفوفة // البحث عن الجزء المبحوث عنه في كل كلمة من كلمات العنوان $suggestions = []; foreach($words as $word){ if(preg_match("/{$search}/i", $word)){ // في حالة احتواء الكلمة على الكلمة المفتاحية array_push($suggestions ,$word); // اضافتها الى مصفوفة الاقتراحات } } return $suggestions; } لنقل مثلا أن نتائج المصفوفة searchResult كانت كـ: $searchRslt = [ 'سيارة رباعية الدفع', 'سيرورة العمل', 'ممر للسير', 'سيرة نبوية' ]; // حق وأن الكلمة المفتاحية هي: $search= 'سير'; ستكون النتيجة كـ: Array ( [0] => سيرورة [1] => للسير [2] => سيرة )
  17. ما قصدك بـ"بعض العنوان Name"؟ هل تقصد الجزء الذي يحتوي الكلمة المبحوث عنها فقط؟ هل يمكنك الاشارة الى مثال عملي؟
  18. لا يوجد في الأمر حيلة، يمكنك مباشرة وضع ملف الاكسل عن طريق سحبه ووضعه في المنطقة المشار اليها في التطبيق المرفق sqlizer
  19. للتحويل من احد صيغ Excel الى صيغة SQL يمكنك استعمال احد البرامج او تطبيقات الويب التي تختصر هذا الأمر من مثل sqlizer ، قومي اولا بتصدير الملف بأحد الصيغ المدعومة (xls , csv , xslx) ثم ارفقي الملف. ثانيا، لإستعمال الخرج بصيغة SQL في تطبيق لارافيل تأكدي من انشاء ملف تهجير ليحوي صيغة تهجير هذا الملف عن طريق طباعة الأمر: php artisan make:migration import_sql_file_migration يستعمل هذا الملف التابع unprepared من الواجهة DB كـ: \DB::unprepared( file_get_contents( "path/to/filename.sql" ) ); حيث يشير path/to/filename.sql الى مسار الملف. في حالة ما كان ملف قواعد البيانات كبيرا يمكنك تعديل المفتاح memory_limit لزيادة الحد من استهلاك الذاكرة. سيتطلب منك أخيرا تنفيذ امر التهجير: php artisan migrate:fresh يمكنك ايضا بعد تصدير ملف sql تضمينه فقط في phpMyAdmin واعداد laravel للعمل مع قاعدة البيانات المضمن فيها.
  20. يمكنك تعريف هاته الدالة ضمن كائن الوثيقة window ثم اعادة استدعاءها، يكون ذلك بشكل ديناميكي كـ: class Person { getAll() { console.log('called') } } function methodName() { // ... return "getAll"; } const firstUser = new Person(); window['target'] = new Function('firstUser.'+methodName()+'()') target(); // called نستعمل في هذا الكائن Function لإنشاء دالة جديدة.
  21. الغرض الأول من المولدات هو في كونها طريقة فعالة للتحكم في تنفيذ وتعليق شيفرة برمجية داخلها. بجانب انها لا تستهلك ذاكرة. لنقل اننا نحتاج أن نعالج منطقا معينا على أربع مستويات: function myFunc() { console.log('lvl 1 starts here') // lvl 1 code ============================ console.log('lvl 2 starts here') // lvl 2 code ============================ console.log('lvl 3 starts here') // lvl 3 code ============================ console.log('lvl 4 starts here') // lvl 4 code ============================ } استدعاء الوظيفة myFunc سيقوم بتنفيذ كامل منطق المستويات الأربع دفعة واحدة. الآن لو أردنا ان يمتلك كل مستوى خرجا معينا يمكن التعامل معه على نطاق خاص به، فإنه من الصعب تحقيقه عن طريق المنطق العادي لاحظ: function myFunc() { // تعليمات المستوى الأول ============================ return 'result after proccessed at level 1'; // =========== سيتم تجاهل كل التالي // تعليمات المستوى الثاني ============================ return 'result after proccessed at level 2'; // تعليمات المستوى الثالث ============================ return 'result after proccessed at level 3'; // تعليمات المستوى الرابع ============================ return 'result after proccessed at level 4'; } لأننا لن نصل من الأساس الى اي من المستويات الأخرى لأن return ستقوم بإيقاف تنفيذ التعليمات البرمجية عند اول مستوى وفقط. الحل هنا، هو في استعمال المولدات Generators، فبعد ان نعالج المعطيات على المستوى الاول يمكننا الاستفادة من عائد (نسميه نتيجة المولد Generator result) يميزه. وبدون الحاجة الى اعادة استدعاء فإنه سيمكنناعن طريق طلب المستوى التالي متى احتجنا المرور الى المستوى الثاني وهكذا. لاحظ المثال: function * myFunc() { // تعليمات المستوى الأول ============================ yield 'result after proccessed at level 1'; // =========== لن يتم تجاهل كل التالي // تعليمات المستوى الثاني ============================ yield 'result after proccessed at level 2'; // تعليمات المستوى الثالث ============================ yield 'result after proccessed at level 3'; // تعليمات المستوى الرابع ============================ yield 'result after proccessed at level 4'; } لاحظ أنه يتم تمييز دوال المولدات في جافاسكربت عن طريق النجمة وعائد المولد عن طريق الكلمة yield. لاحظ التطبيق العملي لها: var myGen = myFunc(); console.log(myGen.next().value) console.log(myGen.next().value) console.log(myGen.next().value) console.log(myGen.next().value) النتيجة: "result after proccessed at level 1" "result after proccessed at level 2" "result after proccessed at level 3" "result after proccessed at level 4" فالمولد هنا يحتفظ بالمستوى الذي هو عليه كل مرة نطلب فيها مستوى جديدا. الشيء الآخر المميز في المولدات هو في كونها كائنات قابلة للتكرار iterable فعلى سبيل المثال يمكنك عن طريقها انشاء تكرار لا متناهي دون ان يتوقف مفسر الشيفرة البرمجية عن العمل: function * infLoop() { let i = 0; while(true) yield i; } var inf = infLoop(); console.log(inf.next().value) console.log(inf.next().value) الآن لو احتجت استدعاء infLoop مليون مرة فستحافظ كل مرة على نطاقها الخاص الذي تستدعى ضمنه مرة واحدة.
  22. لم أواجه المشكلة التي تصادفينها، استطيع تكوين وتعطيل بروتوكول عميل واعداده لاستخدام TCP/IP بشكل عادي. يحتمل ان يكون ذلك بسبب خطأ في اعداد وتكوين SQL Server لديك. أقترح كحل للمشكلة اعادة تثبيته من جديد تماما، تأكدي فقط من تثبيت النسخة الافتراضية basic أثناء تثبيته. قد لا يتم التثبيت بشكل صحيح في حالة انقطاع الانترنت ولذلك يجب التأكد من البقاء على اتصال الى حد تحميل ملفات الاعداد وانطلاق التثبيت. في حالة تمام التثبيت يمكنك اتباع الخطوات التالية لذات الغرض السابق: فيما يلي رابط التحميل الرسمي لنسخة المطور نسخة 2019.
  23. مرحبا أحمد، يمكنك التواصل مع مركز مساعدة أكاديمية حسوب بهذا الخصوص.
  24. لتكوين عميل لاستخدام TCP/IP اتبعي الخطوات التالية: قومي بفتح SQL Server Configuration Manager. من قائمة SQL Server Native Client Configuration اضغطي بالزر الأيمن على Client Protocols ثم على Properties. من قسم Enabled protocols استعملي الاسهم لتغيير ترتيب البروتوكولات حيث ان البروتوكول الاول في الترتيب سيعتمد كافتراضي.
  25. ما هي المشكلة تحديدا؟ ان كانت تظهر رسالة خطأ ما، هل يمكنك ارفاقها ايضا؟ السؤال يفتقر الى الشرح أكثر
×
×
  • أضف...