黑馬lavarel教程---十、lavarel模型關聯

黑馬lavarel教程---十、lavarel模型關聯

1、總結

一句話總結:

一、模型關聯比較方便,一次定義,後面均可以使用
二、關聯關係 使用動態屬性進行調用

 

一、一對多,多對多實例?

一對多:一篇文章有多個評論
多對多:一個文章可能有多個關鍵詞,一個關鍵詞可能被多個文章使用。

 

二、lavarel模型關聯中關聯代碼是寫在主模型中仍是寫在次模型中?

關聯代碼寫在主模型中
誰是主模型誰是次模型根據實際需求進行分析,好比文章表和關鍵詞表多對多關係,當要查全部文章對應的關鍵詞的時候文章表就是主模型

 

三、lavarel關聯關係的方法名稱通常是什麼?

被關聯的模型名小寫
public function 被關聯的模型名小寫(){
    return $this -> hasOne(‘須要關聯模型的命名空間’,’被關聯模型的關係字段,’本模型中的關係字段’);
} 

 

四、lavarel模型中如何設置一對多模型中的外鍵字段?

return $this->hasMany('App\Comment', 'foreign_key', 'local_key');

 

五、關聯關係的使用方法?

使用動態屬性進行調用:$roles = App\User::find(1)->roles()->orderBy('name')->get();
<?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();

 

 

 

 

2、lavarel模型關聯

關聯模型就是綁定模型(表)的關係(關聯表),後續須要使用聯表的時候就能夠直接使用關聯模型。注意:關聯模型必需要建立模型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方法,實現剛纔案例的須要:

 

 

 

顯示效果:

 

相關文章
相關標籤/搜索