public function 被關聯的模型名小寫(){ return $this -> hasOne(‘須要關聯模型的命名空間’,’被關聯模型的關係字段,’本模型中的關係字段’); }
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { /** * 用戶的角色 */ public function roles() { return $this->belongsToMany('App\Role'); } } 一旦關聯關係被定義後,你能夠經過 roles 動態屬性獲取用戶角色: $user = App\User::find(1); foreach ($user->roles as $role) { // } 固然,像其它全部關聯模型同樣,你可使用 roles 方法,利用鏈式調用對查詢語句添加約束條件: $roles = App\User::find(1)->roles()->orderBy('name')->get();
關聯模型就是綁定模型(表)的關係(關聯表),後續須要使用聯表的時候就能夠直接使用關聯模型。注意:關聯模型必需要建立模型。php
例如:一篇文章只有一個做者測試
①建立模型【前提】this
#php artisan make:model Home/Articlespa
#php artisan make:model Home/Author3d
②定義基本的結構代碼code
③關聯模型的關聯方法(重點)blog
注意:在寫關聯模型的時候要分析出是誰關聯誰,誰作主動關聯的模型?當前的案例是文章關聯做者,須要關聯代碼寫在主模型中。教程
語法:路由
public function 被關聯的模型名小寫(){get
return $this -> hasOne(‘須要關聯模型的命名空間’,’被關聯模型的關係字段,’本模型中的關係字段’);
}
關聯關係的使用方法:使用動態屬性進行調用
案例:經過關聯模型的一對一關係查詢出每一個文章對應的做者名稱
①定義須要的路由
②建立須要的方法
使用一對一關聯關係以後,其能夠替代以前寫join聯表操做。
例如:一篇文章有多個評論
因爲文章和評論的關係是一對多的關係,因此須要再去建立一個數據表(評論表):
字段id 主鍵
字段comment 評論內容
字段article_id 和文章的關係字段,文章id
①遷移文件的建立
#php artisan make:migration create_comment_table
②編寫遷移文件代碼
③執行遷移文件生成數據表
#php artisan migrate
④添加測試的評論內容
a. 建立填充器文件
#php artisan make:seeder CommentTableSeeder
b. 編寫填充器文件的代碼
c. 執行填充器文件
#php artisan db:seed --class=CommentTableSeeder
⑤評論模型建立起來
#php artisan make:model Home/Comment
定義其基本的屬性:
案例:查詢出每一個文章(主)下全部的評論(從)。
關聯關係的編寫:
public function 被關聯的模型名小寫(){
return $this -> hasMany(‘須要關聯模型的命名空間’,’被關聯模型的關係字段,’本模型中的關係字段’);
}
與hasOne方法相比,其只是把方法名稱作了變化,其餘與以前一致。
編寫test22方法實現上述案例的要求:
操做代碼:
效果:
例如:一個文章可能有多個關鍵詞,一個關鍵詞可能被多個文章使用。
當點開關鍵詞連接以後,會發現一個關鍵下能搜出不少文章。
所以,文章和關鍵詞之間是多對多的關係。
對對多的關係通過拆分以後其實就是兩個一對多的關係。因爲是雙向一對多的關係,所以光靠2張表是沒法創建的關係的,須要依靠第三張表創建關係(xx與xx的關係表)。
當前已經存在文章表,所以還須要關鍵詞表和關係表。
關鍵詞表:
字段id 主鍵
字段keyword 關鍵詞
文章與關鍵詞的關係表:
字段id 主鍵
字段article_id 文章id
字段key_id 關鍵詞id
簡易模擬:
Id 關鍵詞 id 文章id 關鍵詞id
1 芳華 1 1 1
2 馮小剛 2 1 2
3 2 1
①建立須要遷移文件
#php artisan make:migration create_keyword_table
#php artisan make:migration create_relation_table
②編寫遷移文件的代碼
③執行遷移文件生成數據表
#php artisan migrate
④生成測試的數據
#php artisan make:seeder KeywordAndRelationTableSeeder
編寫相關代碼:
執行填充器文件:
#php artisan db:seed --class=KeywordAndRelationTableSeeder
⑤建立須要的模型
注意:根據手冊中記錄的語法要求,不須要給關係表單獨的建立模型。
該處只須要單獨給keyword建立模型便可
#php artisan make:model Home/Keyword
定義模型的基本內部結構
案例:查詢出每一個文章下所有的關鍵詞
語法:return $this -> belongsToMany(被關聯模型的元素空間路徑,多對多模型的關係表名,當前模型中的關係鍵,被關聯模型的關係鍵);
根據案例的要求,此處的關係映射依舊寫在文章模型中
編寫test23方法,實現剛纔案例的須要:
顯示效果: