استثمر للحياة

مواضيعنا

Model و Query Builder

حجم الخط

model in laravelأولاً الموديل   Model   

   هو مدير عام قواعد البيانات , و المتحكم الاوحد فيها , بحيث يكون لكل جدول فى القاعدة موديل خاص به .


و يوجد عادة فى مجلد  \app\models  نموذج للموديل يسمى  User , و هو المتحكم فى جدول users   ,  يمكننا الاطلاع عليه
و ذلك بفتح الملف  User.php في محرر نصوص .

<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
            use UserTrait, RemindableTrait;
            /**
             * The database table used by the model.
             *
             * @var string
             */
            protected $table = 'users';
            /**
             * The attributes excluded from the model's JSON form.
             *
             * @var array
             */
            protected $hidden = array('password', 'remember_token');
}

 

وهو موديل نمطي جاهز يمكننا التعديل عليه أو عمل موديل جديد لجدول جديد .... فإذا فرضنا جدلاً ان لدينا جدول باسم phones   و نريد إنشاء موديل له باسم Phone , نقوم بنسخ  الملف  و نلصقه فى ملف جديد باسم  Phone.php  ثم نقوم بالتعديل عليه هكذا

<?php
class Phone extends Eloquent {
            /**
             * The database table used by the model.
             *
             * @var string
             */
            protected $table = 'phones';
            }

 

هيا بنا نستخدم الموديل  
إدخال بيانات جديدة لقاعدة بيانات
هب أننا نريد أضافة عضو جديد للجدول users
دعونا نتذكر ماذا نحتاج لإدخال بيانات جديدة لقاعدة بيانات
1-     نحتاج view  يحتوي على استمارةform   لتعبئة البيانات .
نقوم بفتح المسار  views\pages\  و ننشئ ملف جديد باسم  form.blade.phpمثلاً  و نكتب نموذج الإدخال .


{{ Form::open(array('route'=>'user.store')) }}
  {{ Form::label('your name') }}
  {{ Form::text('name','') }}
  <br >
  {{ Form::label('pass word') }}
  {{ Form::password('pass') }}
  <br >
  {{ Form::label( 'E-Mail Address') }}
  {{ Form::text('email','') }}
   <br >
  {{ Form::submit ('Send') }}
{{ Form::close() }}


نلاحظ إضافة المصفوفة   array() و هي التى ستحول البيانات المدخلة للدالة  store في controller  المسمى  user.
راجع
 
2-    نحتاج  controller  يحتويview    و يحتوي أيضاً الموديل و لإرسال البيانات للجدول .
نقوم بعمل   UserController  -  إن لم يك موجوداً – و نستدعي view    ملف الادخال من  خلال الدالة create  

public function create()
            {
                        return View::make('pages.form');
            }

 نلاحظ   إننا فى الدالة create استدعينا الملف form  من مجلد pages  الموجود في مجلد views  و نستحدم الموديل User  من خلال الدالة store المذكورة فى المصفوفة السابقة .


public function store()
            {
$user= new User;
$user->name=Input::get('name');
$user->pass=Input::get('pass');
$user->email=Input::get('email');                                                                                             
$user->save();
            }

نلاحظ أننا استخدمنا القيمة new User  لاستدعاء  الموديل User . و استخدمنا الدلة  save() للحفظ

  3-    نحتاج Route   لتحديد مسار صفحة إدخال البيانات .
نكتب فى الملف  السطر route.phpالتالي

Route::resource('user','UserController');

 
فإذا كتبنا المسار

http://localhost/lvaravel/public/user/create

فنجد الاتي


 
 

و جديرٍ بالذكر أننا يمكن استعراض كل محتوى الجدول باستخدام الموديل User في الدالة show

            public function show($id)
          {
                        $users=User::all();
                        return $users;
            }

 

نلاحظ أن all() معناها استدعاء كل حقول الجدول .
و لاستدعاء بيانات عضو واحد نستخدم ()find  و ايضاً إظهار عدد كل الاعضاء فى قاعدة البيانات  count();

public function show($id)
            {
            $users=User::find($id);
            $count=User::where('id','>',0)->count();
            return $count .'<br > '. $users;
            }

 

 

التصفح Pagination 

و من مزايا الموديل عملية التصفح ,, و تكتب هكذا

public function show($id)
            {
            $user=User::paginate(1);
            return View::make('pages.show')->with('user',$user);
            }

و فى ملف pages/show.blade.php   نكتب

@foreach($user as $uuu)
  <p>{{ $uuu->name }}</p>
   <br >
   @endforeach
 {{ $user-> links() }}

 

نلاحظ

 

 

 1   الدالة foreach هي دالة البحث و لا ننسى غلقها بـ endforeach
 2   استخدام وسوم HTML في داخل Blade 

 3   تكتب   {{ $user-> links() }}  لجعل الناتج على شكل رابط



تعديل بيانات في قاعدة بيانات


لتعديل بيانات سبق لنا إدخالها فى قاعدة البيانات
1-    نحتاج view  يحتوي على استمارةform   لتعديل البيانات .
نقوم بفتح المسار  views\pages\  و ننشئ ملف جديد باسم form1.blade.phpمثلاً  و نكتب نموذج الإدخال .

 {{ Form::open(array('url'=>'user/'. $user->id, 'method' => 'put')) }}
  {{ Form::label('your name') }}
  {{ Form::text('name',$user->name) }}
  <br >
  {{ Form::label('pass word') }}
  {{ Form::password('pass') }}
  <br >
  {{ Form::label( 'E-Mail Address') }}
  {{ Form::text('email',$user->email) }}
   <br >
  {{ Form::submit ('Edit') }}
 {{ Form::close() }}

 راجع النماذج

نلاحظ هنا : استخدمنا الطريقة put  لتعديل البيانت ... و استخدمنا طريقة كتابة رابط داخل المصفوفة و هو

'url'=>'user/'. $user->id,

و استخدمنا المتغير   كقيمة للمخرجات و لاحظ أن كلمة المرور لا يضاف لها قيمة .
 
2-    نذهب  UserController    و نستدعي view    ملف التعديل  من  خلال الدالة  edit
و نكتب فيها

public function edit($id)
      {
      $user=User::find($id);
      return View::make('pages.form1')->with('user',$user);
      }

ملحوظة هامة

في الكود السابق و ضعنا داخل الكونترولرUserController   الموديلUser      و شاشة العرض  Veiw . و هذا يوضح المعنى الحقيقي لـ MVC

و فى الدالة  نكتب update
 

            public function update($id)
            {
                        $user=User::find($id);
                        $user->name=Input::get('name');
                        $user->pass=Input::get('pass');
                        $user->email=Input::get('email');                                                                                             
                        $user->save();
                        return'تم تحديث البيانات';

 
3-    فإذا كتبنا فى المتصفح العنوان

http://localhost/lvaravel/public/user/1/edit

سيظهر لنا بيانات العضو رقم 1 لتعديلها .. و هكذا

*** للمزيد عن الموديل و مكتبة  Eloquent ORM    في Laravel  شاهد الرابط


 
الساحر   Query Builder


تتميز Laravel بوجود مكتبة Query Builder و التي لها لمسة سحرية فى التعامل مع قواعد البيانات .
في الامثلة السابقة كان يمكننا تصفح قاعدة البيانات باستخدام الكود

$user=DB::table('users')->paginate(1);
    return View::make('pages.show')->with('user',$user);

و هو يعمل تماما مثل الموديل User  و ربما يكون اسهل منه .

هذا .. و يفيدنا الساحرQuery Builder في الربط بين الجداول بقاعدة البيانات

راجع المفاتيح و العلاقات في قواعد البيانات

هب إننا نريد عمل قاعدة بيانات لرصد درجات عدد من الطلاب في عدة مواد لإختبار ما , هذا الامر سيتطلب منا 3 جداول في قاعدة البيانات :

الجدول الأول student و الذي يحتوي على بيانات الطالب العامة , سنكتفي بالاسم فقط  و نسمي الحقل name , سنقوم  بإنشاء الجدول و تعبئته بالبذور الأولية


الجدول الثاني subject  و الذي يحتوي على اسم المادة و درجات كل طالب فيها  ,   نسمي حقل اسم المادة  s_name , سنقوم بإنشاء الجدول و تعبئته بالبذور الأولية


الجدول الثالث degree  هو الجدول الربط بين الجدولين  السابقين و يحتوي على حقل معرف id_stud  و حقل معرف المادة id_sub و حقل درجة المادة  degree ,  سنقوم  بإنشاء الجدول و تعبئته بالبذور الأولية


و الأن نقوم بربط الجدول student  بالجدول  degree   فقط على سبيل المثال , نكتب في الكونترولر  الكود

$users=DB::table('student')
        ->join('degree','degree.id_stud','=','student.id')
        ->paginate(3);
return View::make('pages.exm')->with('lara',$users);

نكتب ملف نسميه  exm.blade.php و نكتب فيه الكود

@foreach($lara as $user)
{{ $user-> name  }} {{ $user-> degree }}  <br>
@endforeach


نلاحظ أن : name    هي حقل الاسم فى جدول student  بينما degree هي حقل الدرجة فى جدول degree


الناتج سيكون هكذا


حسن  50
عادل 40
نصيف 100
   


نصيحة :::: يفضل تصميم الجداول على ورقة أو أي برنامج تصميم و تحديد اسماء الحقول حتى لا يحدث لبس .


و الأن نقوم بربط الجدول student  بالجدول  degree  و الجدول  subject   نكتب في الكونترولر  الكود

$users=DB::table('degree')
        ->join('student','student.id','=','degree.id_stud')
        ->join('subject','subject.id','=','degree.id_sub')
        ->get();
return View::make('pages.exm')->with('lara',$users);


نكتب ملف نسميه  exm.blade.php و نكتب فيه الكود

 

@foreach($lara as $user)
{{ $user-> name  }} {{ $user-> degree }} {{ $user-> s_name  }} <br>
@endforeach


الناتج سيكون هكذا


لغة عربية 50 حسن
ريضيات 70 حسن
لغة انجليزية 95 عادل
علوم 100 نصيف

 

*** للمزيد عن Query Builder   في Laravel  شاهد الرابط


 

الموضوع  :  *الموديل   Model   و  Query Builder* المرجع : استثمر للحياة  investolife 

اعلان تجاري
اعلان 468