Skip to main content

الدرس السابع: انشاء صنف النموذج للتعامل مع قواعد البيانات Creating Model Class

الجزء 7: أستخدام الModel

في الجزء السادس من تعلم Laravel 5 , انشئتُ الأتصال بقاعدة البيانات من نوع sqlite, وأسترجعتُ المعلومات من الجدول من قاعدة البيانات بأستخدام الأمر التالي:
DB::table(‘news’)->get();

حيث في كل مرة يتم استرجاع البيانات من الجدول يتم استدعاء الكود اعلاه, هذا ليس من ميزات Laravel حيث انها تتسم بالسهولة والديناميكية! بعد انتهاء الدرس لهذا اليوم سترى ان الكود اعلاه يصبح بهذا الشكل:
$news->get();

عن طريق استخدام الModel, حيث اننا تعلمنا كيف نستخدم الControllers والViews ودرس هذا اليوم سيكون عن الModel وبهذا سيكتمل مفهوم الMVC Model-View-Controller للLaravel

أول شيء لكل جدول بيانات يجب ان يكون له , Modelويفضل اسم الModel مقترن بأسم الجدول اي نفس الأسم حتى يتم التمييز بين الModels:

الModel عبارة عن ملف php يجب ان ينشأ داخل مجلد   App, سأقوم بأنشاء Model للnews table وسأسميه بnews تيمماً بأسم الجدول كالأتي:


طبعاً في البدء يكون هذا الملف ملف php عادي لا يحتوي على كود, او شيء يجب اضافة الnamespace App; ليكون من ضمن نطاق الApp namespace , وبعدها سأستخدم الModel وسأورث كل صفات هذا الصنف Class:
use Illuminate\Database\Eloquent\Model as Eloquent;
class news extends Eloquent{
   
}

وبذلك انتهى عمل الModel الخاص بالnews J



طريقة استخدامه في الController:
يجب استدعاء ملف الnews model عن طريق الكود ادناه:
use App\news;
وبعدها يمكن التمتع بكافة مزايا الmodel  الخاص بالnews :
يوجد طريقتين لأستخدام الnews model اما بطريقة الstatic كالأتي:
news::get();
او بطريقة الObject كالأتي:
news $news;
$news->get();
ملاحظة: عن استخدام الObject اعلاه: يجب ان يكون news $news موجود في function parameter.
والصورة التالية توضح استخدام الnews model:


في الدرس السابق عندما انشئتُ الروابط لعناوين الأخبار كان الرابط عبارة عن معرف الخبر الرقمي كالأتي:
/news/{id}
ولكن ماذا لو اردت ان يكون الرابط يشير الى عنوان مختصر وليس معرف رقمي للخبر؟!
الحل هو بأنشاء حقل جديد في جدول الnews  من نوع string وتسميته بأسم slug , يجب استرجاع عمل الجدول عن طريق الأمر التالي:
php artisan migrate:rollback


وبعدها تعديل الmigration  الخاص بعمل ذلك الجدول بأضافة الحقل كالأتي:


ومن ثم انشاء الجدول من جديد, عن طريق الأمر التالي:
php artisan migrate


ملاحظة: عند تطبيق الmigrate:rollback فأن الجدول ومحتوياته ستحذف!!!

والأن سندرج معلومات في جدول الnews عن طريق الtinker وبأستخدام الmodel  الخاص بالnews:

 كما تلاحظ في الصورة اعلاه يتم استخدام الtinker  عن طريق كتابة الأمر التالي:
php artisan tinker
وبعدها الأشارة الى الnews model عن طريق انشاء كائن سميتهَ $news:
$news = new App\news;
 وسندرج خصائص ذلك الكائن ومن ثم نبطق دالة save() لتخزين الكائن في الجدول:
$news->title = ‘something’;
$news->slug = ‘something’;
$news->content = ‘something’;
$news->save();

ولأظهار البيانات من الجدول عن طريق الأمر التالي:
App\news::all()->toArray();

والأن لغرض تجربة عمل الرابط للتنقل بين الأخبار عن طريق الslug  الخاص بالخبر بدل الرقم التعريفي الخاص بالخبر, وذلك عن طريق تزويد الslug للURL مباشرة وتعديل دالة show في الNewsController كالأتي:

كما تلاحظ في الصورة اعلاه, بدل تزويد دالة الshow ب$id قمتُ بتزويد $slug وبعدها عمل جملة استعلام حسب ال$slug  المزود كالأتي:
$news =  news::where(‘slug’,$slug)->first();
تعمل هذه الدالة على استرجاع كائن من الجدول الذي عامود الslug الخاص به يساوي متغير الslug المزود وبأسترجاع اول كائن first()
فعند كتابة الURL بالشكل التالي: /news/{slug} سيتم اظهار الواجهة كالأتي:


لقد قلت فيما مضى يمكن استخدام الnews model اما بطريقة static او بطريقة object ويجب ان تعرف عند استخدام طريقة الobject تعتبر هذه الطريقة هي حقن الدالة نفسها بالparameter كالأتي:


والأن يجب تعديل الروابط في واجهة الindex لكي يكون توجيه الروابط بالشكل التالي: /news/{slug}


لاحظ عند الضغط على اي رابط من الروابط اعلاه ستوجه لملف التوجيه routes.php , ملف التوجيه نفسه سيستلم الURL التي تساوي القيمة /news/{slug} وبعدها يقوم بتحويلها للدالة المعنية في الNewsController , قبل التوجيه للدالة في الController سنقوم بعمل مايسمى بRoute Model Binding اي دمج الmodel مع الroute , الفائدة من عمل ذلك هو لتمرير قيم من الmodel الى route وبعدها الroute يمررها للcontroller,


لاحظ في الصورة اعلاه, عند الضغط على احد الروابط ستتوجه قيمة الslug بمتغير اسمه {news}  في الكود ادناه:
get(‘news/{news}’,’NewsController@show’);

لاحظ عمل Route Model Binding قبل عملية التوجيه:

Route::bind(‘news’,function($slug){
Return App\news::whereSlug($slug)->first();
});

حيث قيمة الslug في متغير الnews سيتم تضمينها داخل دالة ومن تلك الدالة سيسترجع الكائن الذي الSlug الخاص به يساوي الslug المزود, وبذلك تم تضمين الكائن في متغير الnews حيث سيكون المسترجع للدالة الshow في الNewsController هو Object:


لاحظ في الصورة اعلاه, المسترجع في دالة ال show() من ملف routes.php هو كائن object وسيتم تمرير ذلك الكائن للواجهة التي تسمى بshow.
النتيجة لدرس اليوم عند زيارة /news


وعند الضغط على احد الروابط يتم توجيهنا كالأتي: /news/{slug}



والأن لنفترض اننا نريد تهيئة عمل تعديلedit  لأحد الأخبار,  طبعاً او شيء يجب تحديد التوجيه في ملف التوجيه routes.php كالأتي:


لاحظ التوجيه للتعديل يتم لنفس كائن الخبر Route Model Binding: /news/{news}/edit , سيتم التوجيه للدالة التي تسمى بedit داخل الNewsController مع تزويد تلك الدالة بالكائن Object الذي نريد تعديله {news}
في دالة الedit في الNewsController سيستقبل الكائن object  المسترجع من الroutes.php  ويضعه في متغير $news وبعدها يتم التعديل عليه ....



الناتج:

Comments

Popular posts from this blog

PART #2: Registration and Login System Tutorial Using PHP and MYSQL

PART #2: Registration and Login System Tutorial Using PHP and MYSQL Registration and login system using PHP and MySQL database, in this part you will do the following: 1- Creating the registration page. 2- Validating the registration form. 3- Sending the activation link on successful registration. note: you can find the mailserver tool here: [MailServerTool] Good luck. PHP,Mysql,Programming,web development,How to,Technology,web programming,web project ideas,safaa al-hayali,saf3al2a,Registration and login,Registration and login in php,php and mysql login system,registration system using php and mysql,login and register php,login and register php with database,database,php tutorial,learn php,tutorial

How To Play .srt Subtitles File in Windows Media Player

How To Play .srt Subtitles File in Windows Media Player links: https://sourceforge.net/projects/wmpsub/ wmp,.srt Subtitles File in Windows Media Player,How To Play .srt Subtitles File in Windows Media Player,How To,Safaa Al-Hayali,saf3al2a,srt subtitle in WMP,Windows,Windows Media Player,media,.ass,local subtitles

Virtual Box : How to Increase Disk Size - Windows

How to increase disk size or disk storage in oracle virtual box the command you have to use: vboxmanage.exe modifymedium "[YourPathToVdiFileOfYourVirtualMachine]" --resize [NUMBER] virtual,box,vbox,oracle,partition,size,disk,increase,resize,windows,10,microsoft,vdi,vboxmanage,configuration,Safaa AL-Hayali,saf3al2a,Oracle,VirtualBox,How to,windows 10