国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

Laravel五大功能之Eloquent關系模式

2020-03-22 17:59:19
字體:
來源:轉載
供稿:網友
  • Eloquent是Laravel的原始ActiveRecord是實現的,建立在Laravel的Fluent Query Builder之上的,所以Eloquent類和Fluent類是一樣的,能實現復雜的SQL語句和非常直觀表達出的表與表之間的關系

    ActiveRecord也屬于ORM層,由Rails最早提出,遵循標準的ORM模型:表映射到記錄,記錄映射到對象,字段映射到對象屬性。配合遵循的命名和配置慣例,能夠很大程度的快速實現模型的操作,而且簡潔易懂。

    ActiveRecord的主要思想是:

    1. 每一個數據庫表對應創建一個類,類的每一個對象實例對應于數據庫中表的一行記錄;通常表的每個字段在類中都有相應的Field;
    2. ActiveRecord同時負責把自己持久化,在ActiveRecord中封裝了對數據庫的訪問,即CURD;;
    3. ActiveRecord是一種領域模型(Domain Model),封裝了部分業務邏輯;

    現在我們講講ActiveRecord在Laravel中的應用

    關于Eloquent的方法及其操作可以具體的可以看文檔,在這里我們主要講解表的關系

    一對一的關系(one-to-one relationship)
    關系數據庫中兩個表之間的一種關系,該關系中第一個表中的單個行只可以與第二個表中的一個行相關,且第二個表中的一個行也只可以與第一個表中的一個行相關。
    假如我們有一張user表和一張passport表是一對一的關系

    首先讓我們來表達出這樣子的關系在我們的User類(用于操作user表)中

    html' target='_blank'>class User extends Eloquent  {          public function passport()          {                  return $this->has_one('Passport');//描述了在每一個用戶都有對應的passport          }  }  

    如果我們想得到用戶id為1的passport,我們應該怎么做呢?

    $user = User::find(1);//實例化User表  if(is_null($user))  {          echo 'No User found!';          return;  }  if($user->passport)  {                  //$user->passport將會得到$user對應的Passport實例,再來獲取number          echo 'The user's passport number is'.$user->passport->number;  }  

    再來看看我們的Passport類(用于操作passport表)中,有一個外鍵user_id

    class  Passport extends Eloquent  {          public function user()          {                  return $this->belongs_to('User');//這樣我們就表達出了user_id這個外鍵對應的是user表          }  }  

    如果我們要通過一個passport來得到它所指向的用戶的名字

    $passport = Passport::find(1);  echo $passport->user->name;  

    就是這么簡單!laravel就是這么方便!如果你用過其他的PHP框架的話,一定能感覺到的!


    一對多關系(one-to-many relationships)
    關系數據庫中兩個表之間的一種關系,該關系中第一個表中的單個行可以與第二個表中的一個或多個行相關,但第二個表中的一個行只可以與第一個表中的一個行相關。
    假如我們有一張運動小組表,有運動員表許多的運動員,每一個運動員都屬于某一個小組

    表team

    class Team extends Eloquent  {      public function palyers()      {          return $this->has_many(‘Player’);      }  }  

    表players

    class Player extends Eloquent  {      public function team()      {          return $this->belongs_to('Team');      }  }  

    接著咱們來看看改如何來得到一個小組的所有成員呢?

    $team = Team::find(1);  $palyers = $team->palyers()->get();  foreach($players as $player)  {          echo '$play->name is on team $team->name';  }  

    多對多關系(many-to-many relationships)
    關系數據庫中兩個表之間的一種關系, 該關系中第一個表中的一個行可以與第二個表中的一個或多個行相關。第二個表中的一個行也可以與第一個表中的一個或多個行相關。要表示多對多關系,您必須創建第三個表,該表通常稱為聯接表,它將多對多關系劃分為兩個一對多關系。
    假如有這樣子三張表

    每個學生都可以任意的挑選課程,每門課程也可以有任意的學生來挑選
    現在來看看我們怎么定義Model
    Student表的模型

    class Student extends Eloquent  {          public function courses()          {                  return $this->has_many_and_belongs_to('Course');          }  }  

    Course表的模型

    class Course extends Eloquent  {          public function students()          {                  return $this->has_many_and_belongs_to('Student');          }  }  

    讓我們來使用我們的模型,通過找到id為1的學生選修的課程

    $student = Student::find(1);    if(is_null($student))  {          echo '沒有此學生';          exit;  }    if(!$student->courses)  {          echo '學生: $student->name 沒有選修任何課程。';          exit;  }  else  {          foreach($student->courses as $course)          {                  echo '學生:$student->name 選修的課程有:$course->name';          }  }  

    接著我們來通過課程找出他所對應的所有學生

    $course = Course::find(1);  if(is_null($course))  {          echo '沒有此課程';          exit;  }  if($course->students)  {          foreach($course->students as $student)          {                  echo '該課程:$course->name選修的學生有:$student->name';          }  }  else  {          echo '課程暫時沒有學生選修!';          exit;  }  

    如果我們想給一門沒有被選修的課程添加信息應該怎么做呢?

    $course = Course::find(12);  if(is_null($course))  {          echo '該課程不存在!'          exit;  }  $new_student = array(          'name' => '沖田杏梨';  );    $course->students()->insert($new_student);  
    PHP編程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 克什克腾旗| 南郑县| 丹凤县| 鹤壁市| 乐业县| 凤台县| 康马县| 德化县| 晋宁县| 清徐县| 孟连| 宜章县| 乐东| 黔南| 绵阳市| 井研县| 淮安市| 沁源县| 区。| 光山县| 晋江市| 松溪县| 甘谷县| 武平县| 惠州市| 准格尔旗| 金沙县| 改则县| 怀安县| 武平县| 陆丰市| 疏勒县| 伽师县| 务川| 台北市| 佛教| 思茅市| 盐边县| 靖安县| 松原市| 达尔|