Tuesday, July 26, 2016

Laravel 5.2 සිංහලෙන් - many to many relationships using Eloquent model

අද අපි බලමු laravel  වල database tables  join කරන්නනේ කියලා. joins,  laravel වල DB class එක use කරගෙන කරන්න පුළුවනි. හැබයි එතකොට select, joins, ඔක්කොම අපි ලියන්න ඕන.

නමුත් Eloquent model එක use කරගෙන joins ලේසියෙන්ම කරන්න පුළුවන්.
https://laravel.com/docs/5.2/eloquent-relationships

දැන් බලමු මොනවද use කරන tables කියලා.

Student :

ID
Name
NIC
Birthday
Address
Email
Telphone
Password
Auto Generated
Not Null
Not Null
Not Null
Not Null



MD5 Encrypted
Not Null


Exams:

ID
Exam Code
Exam Name
Exam Fee
Status
Auto Generated
Not Null
Not Null
Not Null
Not Null
Not Null


ExamRegistration:

ID
ExamID
ExamDate
Primary Key
Auto generated
Not Null
References Exam (ExamID)
Not Null
Not Null


StudentExamRegistration:

ID
ExamRegID
StudentID
Date Registered
Grade Obtain
Status
IsPostpone
Primary Key
Auto generated
Not Null
References ExamRegistration
 (RegID)
Not Null
References Student(StudentID)
Not Null
Not Null
Null
Not Null
Bit
Not Null




laravel migrations use කරගෙන ඉහත දක්වා ඇති tables හදාගන්න ඕන. migrations භාවිතා කරගෙන database tables හදන මම කලින් posts වලින් කියලා දුන්නා. තව එකක් තියෙනවා කියන්න මේ user table එක larevel authentication වලට හදන table එකමයි. laravel authentication කරන විදියත් මම කලින් posts එකක කියලා දුන්නා. laravel authentication වලට භාවිතා කරන table එකටම අපේ fields එකතු කරන්න. වෙන විදියකට කිව්වොත් migration වල තියෙන user migration එකට අපේ fields එකතු කරන්න.

ඊට පස්සේ එම එක් එක් tables සදහා models හදාගන්න ඕන. ඒවා මේ විදියට වෙනස් කරන්න. 

User.php model:
namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use StudentExamRegistrations;

class User extends Authenticatable
{
    protected $fillable = [
        'name', 'nic','birthday','address', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function studentExams()
    {
        return $this->hasMany('App\StudentExamRegistrations','student_id');
    }
  
 Exams.php model

namespace App;

use Illuminate\Database\Eloquent\Model;

class Exams extends Model
{
    protected $table = 'exams';
    protected $fillable=[
    'exam_code',
    'exam_name',
    'exam_fee',
    'status',
    ];

    public function studentExams()
    {
        return $this->belongsToMany('App\ExamRegistration','exam_id');
    }
}
ExamRegistration.php model:

namespace App;

use Illuminate\Database\Eloquent\Model;
//use StudentExamRegistrations;

class ExamRegistration extends Model
{
    protected $table = 'exam_registration';
    protected $fillable=[
    'exam_id',
    'exam_date',
    ];

     public function studentExams()
    {
        return $this->belongsToMany('App\StudentExamRegistrations','exam_reg_id');
    }

    public function ExamDetail(){

        return $this->belongsTo('App\Exams','id');

    }
    
}
 StudentExamRegistrations.php model

namespace App;

use Illuminate\Database\Eloquent\Model;

class StudentExamRegistrations extends Model
{
    protected $table = 'student_exam_registration';
    protected $fillable=[
    'exam_reg_id',
    'student_id',
    'date_reg',
    'grade',
    'status',
    'is_postpone',
    ];


    public function user(){

        return $this->belongsTo('App\User','id'); 

    }

    public function ExamReg(){

        return $this->belongsTo('App\ExamRegistration','id');

    }
}
 දැන් තියෙන්නේ අපේ controller එක හදාගන්න එක.

ExamsController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\User;
use App\StudentExamRegistrations;
use App\Exams;
use App\ExamRegistration;
use Auth;

class ExamsController extends Controller
{
    public function myPendingExams()
    {
     $userId = Auth::id();
     $email = Auth::user()->email;


        $datas1 = User::with('studentExams')->get();       
        $datas2 = StudentExamRegistrations::with(['user','ExamReg','ExamReg.ExamDetail'])->get();
        $datas3 = User::with(['studentExams','studentExams.ExamReg','studentExams.ExamReg.ExamDetail'])->get();

        $datas4 = Auth::User()->with(['studentExams','studentExams.ExamReg','studentExams.ExamReg.ExamDetail'])
                ->where('users.id', '=' ,$userId)
                ->get();

        $datas5 = Auth::User()->with(['studentExams'])
                ->where('users.id', '=' ,$userId)
                ->get();

        return ($datas5[0]->studentExams[0]->id);

     //return view('myExams',compact('datas5'));
    }
}
 දැන් හරි...........


මේ ලිපිය ප්‍රයෝජනවත් කියලා හිතෙනවනම් මේ ලිපිය Share කරලා යාළුවන්ටත් කියන්න. Comment එකක් දාන්නත් අමතක කරන්න එපා. ජය වේවා..!!  







































Share/Bookmark

0 comments:

Post a Comment