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

Adnane Kadri

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

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

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

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

    51

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

  1. هل الجداول تحتوي بالفعل على علاقات؟ يرجى ايضا فهم الاستعلام على نحو جيد لتنفيذه. هل يحتوي الجدول المستهدف على عمود order_id؟ و جدول orders على عمود id؟ هل يمتلكان نفس نوع البيانات؟ في حالة التعذر رغم ذلك جرب تنفيذ: SET FOREIGN_KEY_CHECKS=0; ثم اعد المحاولة.
  2. جرب تنفيذ الاستعلام ALTER TABLE ADD CONSTRAINT للتعديل على جدول منشئ بالفعل ALTER TABLE related_table ADD FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE; يقتضي هذا ان لا تكون العلاقة معرفة بالفعل. لأنها هي الأخرى قيد CONSTRAINT. ان كانت هنالك علاقات بالفعل، يجب حذفها اولا ثم تنفيذ الاستعلام الموصوف لتعريف العلاقة وفق قيد.
  3. هل جربت تعريف القيد ON DELETE CASCADE عند تعريف العلاقات بين الجداول؟ يتم استخدام هذا القيد في MySQL لحذف الصفوف من الجدول الفرعي تلقائيا عند حذف الصفوف من الجدول الأصلي. مثلا، عندما يقوم المستخدمون بالتسجيل في الموقع ورفع منتجات خاصة بهم مثلا. سيتم التخلص من هاته المنتجات مباشرة بعد حدف المستخدم المعني. يمكن اضافة تعريف القيد الى تعريف العلاقة كـ: CREATE TABLE some_related_table ( id INT, order_id INT, FOREIGN KEY(order_id) REFERENCES orders(id) ON DELETE CASCADE ); ثم سيتم اعتبار هذا القيد عند كل حذف. راجع الاجابة
  4. لأنه تم حقن عنصر li في عنصر ul.collection . في السطر 25 . يعني انه سيمكن استعراض الناتج بشكل عادي
  5. هي مضافة بالفعل، أنت لم تقم بحقن الناتج الى عنصر body لتختبر الناتج فقط. جرب تحديد body واضافة العنصر li اليه وسترى انها مضافة. li.appendChild(a); document.body.appendChild(li); console.log(li); يمكنك ايضا طباعة محتوى ال HTML الخاص بالعنصر li لرؤية الناتج: a.innerHTML = `<p>mohammed is dev</p>` li.appendChild(a); console.log(li.innerHTML); لأن طباعة li مباشرة ستعطي كائنا عن الصنف HTMLLIElement فقط.
  6. يفترض ان تكون هنالك علاقة بين المنشور المراد جلبه والمستخدم. يوجد التابع with لخدمة هذا الغرض، يمكن استعماله لجلب الجدول المرتبط هنا: Product::with('user')->find($someProductId); يقتضي هذا ان توجد علاقة بين الجدولين: // app/models/User.php public function user(){ return $this->belongsTo(User::class); }
  7. أظن انه لا يوجد في فكرة بناء بوت للتداول شيء خفي، كل ما يجب عليك هو الاستماع لأحداث معينة والتصرف بناء عليها. مثل استهداف الوظيفة "بيع" عند الحدث: "وصول الرمز كذا الى مبلغ كذا." ستحتاج في هذا الاتصال عن طريق واجهات التطبيق البرمجية APIS بمصادر خارجية للحصول على أسعار الوقت الفعلي للرموز التي تحاول التداول فيها. ومن جهة اخرى وصولا عن طريق الـ API الى حسابك في الموقع الوسيط (البروكر) الذي تشتغل فيه. هاته هي الفكرة بشكل مبدئي فيه. قد تجد حزما ومكتبات مفتوحة المصدر ممن طوروا هذا النموذج أكثر ليستوعب استراتيجيات التداول مثلا. فهو ليس حكرا على لغة برمجية دون غيرها. ومثلما يمكن عمله بلغة C++ يمكن ايضا عمله بجافاسكربت او غيرها. قد يكون هنالك بعض المعايير التي تحاول التفضيل بين لغة واخرى في هذا الاطار من مثل: ان تكون اللغة قابلة للتوسع بشكل كبير، لأنك قد تحتاج تغيير استراتيجيات التداول الخاصة بك او بعملاؤك او تطويرها. ان تتوفر على مؤشرات ومقاييس الآداء. لأنها قد تستعمل في تقييم خوارزمية ما. ان تتوفر على طرق بسيطة للتعامل مع بيانات الوقت الفعلي (نتحدث عن التعامل مع بروتوكول websocket). لأنك ستحتاج دوما اسعارا محدثة وجديدة. ان تكون متوافقة مع انظمة التشغيل cross-platform. فأنت لا تريده ان يتعطل في بيئة تشغيل غير التي بني عليها. ان تكون سريعة في جمع وتحليل ومعالجة وتخزين والتعامل مع مجموعات بيانات ضخمة. ان كنت تحترف لغة معينة على وجه الخصوص استعملها لذلك، وإلا فإنه يمكنك الاختيار ما بين: c++ , java , Python فهي اشهر ما يستعمل في بناء بوتات التداول.
  8. يمكنك الاستعانة بمفهوم المراقبة او المراقبين Observers لتحقيق هذا الغرض. وهي مثل عمليات مراقبة الاحداث التي تختص بنموذج ما. تحتوي أصناف Observer في لارافيل على توابع يمثل كل منها حدثا من أحداث Eloquent التي ترغب في الاستماع إليها. <?php namespace App\Observers; use App\Models\User; class UserObserver { /** * Handle the User "created" event. * * @param \App\Models\User $user * @return void */ public function created(User $user) { // } /** * Handle the User "updated" event. * * @param \App\Models\User $user * @return void */ public function updated(User $user) { // } /** * Handle the User "deleted" event. * * @param \App\Models\User $user * @return void */ public function deleted(User $user) { // } /** * Handle the User "restored" event. * * @param \App\Models\User $user * @return void */ public function restored(User $user) { // } /** * Handle the User "forceDeleted" event. * * @param \App\Models\User $user * @return void */ public function forceDeleted(User $user) { // } } لاحظ ان كل تابع يستقبل النموذج المستهدف. سيمكنك معاملته وفق اي منطق وتطبيق اي ما تريد عليه قبل حفظه الى قاعدة البيانات بشكل تام. نستعمل الأمر: php artisan make:observer UserObserver --model=User لإنشاء مراقب جديد. ونقوم بتسجيله في توابع boot لأحد موفرات الخدمة، يقترح ان يكون موفر خدمة التطبيق AppServiceProvider: public function boot() { User::observe(UserObserver::class); }
  9. بالاضافة الى المقترح، يمكنك اعادة تعيين قاعدة جديدة في معيار psr-4 في ملف composer.json: "autoload": { "psr-4": { "App\\": "app/", "MyFolder\\": "yourFolder/" }, قد تحتاج أيضا الى تنفيذ الامر: composer dump-autoload الآن قم بتنفيذ الأمر: php artisan make:model ../MyFolder/User لتوليد هذا النموذج. سيتم انشاء ملف النمودج الجديد مباشرة في هذا المجلد. راجع:
  10. يمكنك معاملة الناتج كتجميعة واستعمال التابع sortBy لذات الغرض، يجب حقن Closure إلى التابع sortBy كـ: $products = UserProducts::with('products')->get() ->sortBy(function($userProduct) { return $userProduct->products->type; } )
  11. تعد ساعتان وقتا كاف جدا لتعلم أساسيات البرمجة والانطلاق في هذا المجال، ولا يجب عليك ابدا الاحساس بالاحباط بهذا الشأن. بجانب انك لن تحتاج اصلا التركيز على الوقت في البداية، بل ركز على تحصيلك قدرا معينا من المادة العلمية بشكل دوري، على سبيل المثال: يجب علي تعلم شيئ جديد كل يوم. يجب علي ممارسة ما تعلمته بالفعل. يجب علي مراجعة ما احس اني نسيته. ولا يهم ان كنت قد اكملت ذلك في خمس دقائق او ساعة او ساعتين. فالمهم ان تركز على التحصيل، لا على الوقت الذي تحدث فيه هاته العملية. وان كنت تدرك القليل من الفرق بين ما كنت عليه وبين ما اصبحته فهو كاف جدا للإستمرار. ارى انك مشترك بدورة تطوير واجهات المستخدم، سيمكنك العمل بهذا على طول الدورة. أما الارهاق والتعب والاحباط فهي مشاعر جد طبيعية يتسبب فيها حجم المجال وطبيعته، ويختبرها كامل من له علاقة بالمجال في العالم. يجب ان تعتاد عليها هي الأخرى. راجع الاجابة عن سؤال مشابه: كم وقت ممكن لاصبح مطور ويب Fullstack؟ اظن ان طبيعة الأعمال بدوام كامل لمدة طويلة تقتضي ان يكون هنالك بعض الفراغات المتقطعة، هاته الفراغات يمكن استغلالها في خدمة هاته الأغراض. وليكن مثلا تحصيل ومشاهدة مادة علمية جديدة او حتى الاستماع لها او حتى ممارستها عمليا ولو على الهاتف او الجهاز المحمول. ستجد لاحقا اثناء جزء التطبيق العملي انك قد قطعت شوطا مهما في فهم ما تقوم به. ستحتاج الالتزام قليلا لتحقيق هذا الغرض اول الامر ثم ستعتاد عليه. ولتجنب الملل والخروج من جو المجال ككل، اختبر دوما افكارا جديدة واحط نفسك (ولو على مواقع التواصل الاجتماعي) بأشخاص واشياء من المجال نفسه.
  12. يمكنك تجاوز التابع createApplication لتحديد مسار ملف بيئة جديد غير الافتراضي. يعيد هذا التابع كائنا عن الصنف Illuminate\Foundation\Application. يبدوا هذا التابع كـ: /** * Creates the application. * * @return \Illuminate\Foundation\Application */ public function createApplication() { $app = require __DIR__.'/../bootstrap/app.php'; $app->make(Kernel::class)->bootstrap(); return $app; } في السمة CreatesApplication الموجودة داخل Tests يوجد التابع loadEnvironmentFrom، يمكنك استعماله لتحديد مسار جديد: /** * Creates the application. * * @return \Illuminate\Foundation\Application */ public function createApplication() { $app = require __DIR__.'/../bootstrap/app.php'; $app->loadEnvironmentFrom('.env.testing'); $app->make(Kernel::class)->bootstrap(); return $app; } يتم استعمال هاته السمة من قبل الصنف المجرد TestCase الكائن بـ tests. وترث كامل اختبارات الوحدة والميزة هذا الصنف، ويتم تشغيل هذا التابع من السمة عند كل مرة يتم فيها عمل booting للإختبارات. لاحظ أن اي اعداد آخر معرف في ملف phpunit.xml سيتم تجاهل قيمته المسندة له في ملف البيئة الجديد. اي ان الأولوية تكون دوما لملف phpunit.xml فهو المفترض ان يحدد طريقة عمل التطبيق او الاختبارات في بيئة اختبارية.
  13. يمكنك مباشرة حقن اسم ملف الترجمة كمعامل للتابع get: Lang::get('file_name'); او ايضا باستعمال الدالة المساعدة __ : __('file_name') لاحظ أنه لا يجب الحاق الاسم بامتداد الملف. اي انه لا يجب عليك اضافة php. لتوصيف الملف. يمكنك ايضا استعمال الوظيفة file_get_contents بشكل تقليدي كـ: file_get_contents(base_path('resources/lang/en/validation.php')) التوطين في Laravel
  14. لا حاجة لإنشاء ملفين منفصلين تماما. يمكنك استعمال موجهات القالب blade directives للتحقق من ما ان كان المستخدم مسجلا اما لا لعرض قسم معين من الصفحة. يوجد الموجه auth@ للتحقق من ما ان كان المستخدم موثقا: @auth // اي محتوى يعرض للمستخدمين الموثقين فقط @endauth يوجد ايضا الموجه guest@ للتحقق من ما ان كان المستخدم غير موثق: @guest // اي محتوى يعرض للمستخدمين الزوار فقط @endguest قوالب Blade في Laravel
  15. كطريقة تقليدية، يمكنك حقن عدد المستخدمين الاجمالي الى متغير وارساله الى ملف العرض كـ: // code from controller $users = User::paginate(10); $users_count = User::count(); return view('users.index', compact('users' ,'users_count')); ثم طباعته كـ: {{ $users_count }} كطريقة اكثر اختصارا يمكنك الاستعانة بمتغيرات التصفيح pagination variables وتوابعه لخدمة هذا الغرض. يوجد التابع total الذي يعطي العدد الاجمالي للعناصر: {{ $users->total() }} اعرف أكثر عن ترقيم الصفحات Pagination في Laravel
  16. لا يوجد مشكلة بالشيفرة التي لديك، يحتمل ان يكون هنالك مشكلة باستهداف حدث السحب. بجانب ان اغلب الهواتف لا تستمع لحدث السحب والافلات drag and drop . بدل هذا يوجد لديها الاحداث touch المتفرع عنها: touchstart بدل dragstart touchend بدل dragend touchmove بدل dragover touchleave بدل dragleave touchcancel بدل drop جرب اختبار تشغيل الاحداث drag على حاسب اولا. ثم هاته الاحداث touch في الهاتف لديك. تأكد فقط من اثارة حدث السحب على نحو صحيح. ففي حالة النص مثلا، تأكد من تحديد كامل النص ثم اسحبه. فهم الأحداث في جافاسكربت
  17. من على الصفحة الرئيسية لمستودعك على ال GitHub انتقل الى اعدادات المستودع الخاص بك. من القائمة اليسرى، انقر فوق branches. في قسم الفرع الافتراضي انقر على الاسهم switch to another branch استخدم القائمة المنسدلة التي تظهر وحدد الفرع الذي تريد. احفظ الاعدادات. سيتلقط github الفرع الجديد على انه الفرع الرئيسي، سيمكن الدفع اليه بشكل افتراضي
  18. التابع groupBy يقبل عددا من المعاملات، يمكنك تمرير كامل اسماء الاعمدة عبرها وسينجح الاستعلام: $posts = Posts::groupBy('first_col' , 'second_col')->get(); ايضا سيمكنك اعادة تجميع الصفوف بعد تحديدها عن طريق select: $posts = DB::table('posts') ->select(['first_col', 'second_col']) ->groupBy(['first_col', 'second_col']) ->get(); منشئ الاستعلامات في Laravel
  19. قد يحدث هذا بسبب انك تحاول الدفع الى فرع غير موجود. تأكد ان الفرع الذي تدفع اليه موجود اولا: git branch ثم جرب تنفيذ الامر: git push origin master --force او: git push origin master:main
  20. يحدث هذا لأنك تقومين بإظهار العنصر الأول عند استهداف اي حدث ضغط يخص عناصر + في: const content = document.getElementsByClassName("content")[0]; سيعني هذا اختفاء واظهار العنصر الاول عند الضغط على علامة + الاولى والثانية بذات الوقت. لتجاوز هاته المشكلة، سنحتاج تمييز اشارة ال + الاولى عن الثانية، لنقم بتعريف فهرس المكون المستهدف في عنصر الاشارة + الذي نريده. ثم سيسهل تحديده عن طريق الجافاسكربت عند الضغط عليه وبالتالي اظهار او اخفاء العنصر المراد. لنقم باضافة الخاصيتين data-target-index في كل من عنصري plus كـ: العنصر الاول <span class="plus" data-target-index="0">+</span> العنصر الثاني <span class="plus" data-target-index="1">+</span> ثم عن طريق الجافاسكربت نقوم اولا بالتقاط القيمة المخزنة في data-target-index الخاصة بالعنصر المضغوط عليه: allplus.forEach(item => { item.addEventListener("click", (eo) => { var target = item.dataset.targetIndex; وأخيرا استعمال الفهرس المحصل عليه في تحديد العنصر المستهدف واظهاره او اخفاءه: var content = document.getElementsByClassName("content")[target]; content.classList.toggle("mm") فهم الأحداث في جافاسكربت التفريق بين السمات (attributes) في HTML والخاصيات (properties) في جافاسكربت
  21. يبدوا ان هنالك مشكلة بالوصول الى ملحقات PHP واضافاتها. لنتأكد من وصف مسار صحيح في ملف اعداد php والذي هو php.ini. يكون ذاحل مجلد xampp/php قومي بالبحث عن سطر extension_dir واسندي له القيمة C:\xampp\php\ext كـ: extension_dir="C:\xampp\php\ext" قد تجدين هذا السطر: extension_dir = "./" قومي بتعليقه في حالة لم يكن معلقا: ;extension_dir = "./" ايضا لما تستعملين git bash لتنفيذ هاته الاوامر؟ هل تظهر نفس المشكلة عند استعمال طرفية windows بشكل عادي؟
  22. ما تتحدث عنه يدور حول فكرة authentication guard او حراس المصادقة. يحدد هذا الحارس كيفية تعامل لارافيل مع الطلبيات المختلفة. مثال: يحرس او يتأكد من امتلاك المستخدم رمزا مميزا يشير الى بياناته المسجلة والموثقة في جدول المستخدمين. في حالة الحاجة الى انشاء حراس مخصصين وليكن حارسا خاصا بتسجيل دخول المستخدمين المشرفين فقط. يمكن تعريف ذلك في مصفوفة guards في ملف الاعداد app/config.php : 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin_guard' => [ 'driver' => 'session', 'provider' => 'admin_users_provider', ], ], لاحظ اننا نشير الى موفر خدمة نرهنه بالحارس admin_guard. بمعنى انه يجب ايضا تعريف هذا الموفر. يكون ذلك بذات الملف في مصفوفة providers: 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admin_users_provider' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], ], بعد هذا سيمكنك مباشرة استعمال هذا الحارس عن طريق حقن اسمه كمعامل في التابع guard لـ Auth: $data = ['email' => $request->email, 'password' => $request->password]; if (Auth::guard('admin_guard')->attempt($data)) { return redirect(route('admin.dashboard')); } في حالة الحاجة الى جعل هذا الحارس حارسا افتراضيا قم باسناد اسمه الى القيمة guard في المصفوفة defaults من ملف اعداد عمليات المصادقة auth.php : 'defaults' => [ 'guard' => 'admin_guard', 'passwords' => 'users', ], استفد امثر من هاته الاجابة شرح guards او guard تعرف أيضا اكثر عن الاستيثاق في لارافيل
  23. الحصول على الشهادة يتطلب المرور بكامل مراحل الامتحان التي تتضمن: حصولك على موعد لمحادثة صوتية يتم فيها نقاش ما قمت به خلال الدورة وما تعلمته فيها. تحديد مشروع تخرج يتم اعطاءه لك يكون متعلقا بما تعلمته. مراجعة المشروع والتخرج. على ان هذا يتطلب اتمام اربعة مسارات تعليمية على الاقل من الدورة التي تريد التخرج منها. رفع المشاريع المنجزة على github والتطبيق العملي مع المدرب خلال الدورة. اقرأ اكثر عن الامتحان والحصول على الشهادة
  24. نفذ الأمر npm install @types/node --save-dev سيتم تثبيت كامل ملحقات Node. التي Node:path هو من بينها.
  25. أتذكر استخدام Laravel telescope لمثل هذا الغرض. هي ملحقة محلية ببيئة تطوير لارافيل توفر نفاصيل اكثر دقة على الطلبات الواردة إلى تطبيقك، والاستثناءات ، وإدخالات السجل، والبريد، والإشعارات، وعمليات التخزين المؤقت، والمهام المجدولة، ومن بينها استعلامات قاعدة البيانات. يمكن تثبيتها كحزمة خارجية. في القسم الخاص باستعلامات قواعد البيانات تتاح قائمة لكامل استعلامات قواعد البيانات التي تم تنفيذها. سرعة التنفيذ ومدته وتفاصيل أخرى. بجانب انها صديقة جدا لبيئة التطوير. أظن انها ما تبحث عنه. يمكنك استعمالها لتحسين جودة استعلامات قواعد البيانات لديك.
×
×
  • أضف...