日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

黑马lavarel教程---10、lavarel模型关联

發(fā)布時(shí)間:2025/7/14 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马lavarel教程---10、lavarel模型关联 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

黑馬lavarel教程---10、lavarel模型關(guān)聯(lián)

一、總結(jié)

一句話總結(jié):

1、模型關(guān)聯(lián)比較方便,一次定義,后面都可以使用
2、關(guān)聯(lián)關(guān)系 使用動(dòng)態(tài)屬性進(jìn)行調(diào)用

?

1、一對多,多對多實(shí)例?

一對多:一篇文章有多個(gè)評(píng)論
多對多:一個(gè)文章可能有多個(gè)關(guān)鍵詞,一個(gè)關(guān)鍵詞可能被多個(gè)文章使用。

?

2、lavarel模型關(guān)聯(lián)中關(guān)聯(lián)代碼是寫在主模型中還是寫在次模型中?

關(guān)聯(lián)代碼寫在主模型中
誰是主模型誰是次模型根據(jù)實(shí)際需求進(jìn)行分析,比如文章表和關(guān)鍵詞表多對多關(guān)系,當(dāng)要查所有文章對應(yīng)的關(guān)鍵詞的時(shí)候文章表就是主模型

?

3、lavarel關(guān)聯(lián)關(guān)系的方法名稱一般是什么?

被關(guān)聯(lián)的模型名小寫
public function 被關(guān)聯(lián)的模型名小寫(){return $this -> hasOne(‘需要關(guān)聯(lián)模型的命名空間’,’被關(guān)聯(lián)模型的關(guān)系字段,’本模型中的關(guān)系字段’); }

?

4、lavarel模型中如何設(shè)置一對多模型中的外鍵字段?

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

?

5、關(guān)聯(lián)關(guān)系的使用方法?

使用動(dòng)態(tài)屬性進(jìn)行調(diào)用:$roles = App\User::find(1)->roles()->orderBy('name')->get();
<?phpnamespace App; use Illuminate\Database\Eloquent\Model; class User extends Model {/*** 用戶的角色*/public function roles(){return $this->belongsToMany('App\Role');} } 一旦關(guān)聯(lián)關(guān)系被定義后,你可以通過 roles 動(dòng)態(tài)屬性獲取用戶角色:$user = App\User::find(1);foreach ($user->roles as $role) {// } 當(dāng)然,像其它所有關(guān)聯(lián)模型一樣,你可以使用 roles 方法,利用鏈?zhǔn)秸{(diào)用對查詢語句添加約束條件:$roles = App\User::find(1)->roles()->orderBy('name')->get();

?

?

?

?

二、lavarel模型關(guān)聯(lián)

關(guān)聯(lián)模型就是綁定模型(表)的關(guān)系(關(guān)聯(lián)表),后續(xù)需要使用聯(lián)表的時(shí)候就可以直接使用關(guān)聯(lián)模型。注意:關(guān)聯(lián)模型必須要?jiǎng)?chuàng)建模型

1、一對一關(guān)系

例如:一篇文章只有一個(gè)作者

?

①創(chuàng)建模型【前提】

#php artisan make:model Home/Article

#php artisan make:model Home/Author

?

?

?

?

②定義基本的結(jié)構(gòu)代碼

?

?

?

?

?

?

?

③關(guān)聯(lián)模型的關(guān)聯(lián)方法(重點(diǎn))

注意:在寫關(guān)聯(lián)模型的時(shí)候要分析出是誰關(guān)聯(lián)誰,誰做主動(dòng)關(guān)聯(lián)的模型?當(dāng)前的案例是文章關(guān)聯(lián)作者,需要關(guān)聯(lián)代碼寫在主模型中

語法:

???????? public function 被關(guān)聯(lián)的模型名小寫(){

?????????????????? return $this -> hasOne(‘需要關(guān)聯(lián)模型的命名空間’,’被關(guān)聯(lián)模型的關(guān)系字段,’本模型中的關(guān)系字段’);

}

?

?

?

?

?

關(guān)聯(lián)關(guān)系的使用方法:使用動(dòng)態(tài)屬性進(jìn)行調(diào)用

?

?

?

?

案例:通過關(guān)聯(lián)模型的一對一關(guān)系查詢出每個(gè)文章對應(yīng)的作者名稱

①定義需要的路由

?

?

?

?

②創(chuàng)建需要的方法

?

?

?

?

使用一對一關(guān)聯(lián)關(guān)系之后,其可以替代之前寫join聯(lián)表操作。

?

2、一對多關(guān)系

例如:一篇文章有多個(gè)評(píng)論

?

由于文章和評(píng)論的關(guān)系是一對多的關(guān)系,所以需要再去創(chuàng)建一個(gè)數(shù)據(jù)表(評(píng)論表):

字段id???????????????????????? 主鍵

字段comment???????????? 評(píng)論內(nèi)容

字段article_id???????????? 和文章的關(guān)系字段,文章id

①遷移文件的創(chuàng)建

#php artisan make:migration create_comment_table

?

?

?

?

②編寫遷移文件代碼

?

?

?

?

③執(zhí)行遷移文件生成數(shù)據(jù)表

#php artisan migrate

?

?

?

?

④添加測試的評(píng)論內(nèi)容

a. 創(chuàng)建填充器文件

#php artisan make:seeder CommentTableSeeder

?

?

?

?

b. 編寫填充器文件的代碼

?

?

?

?

c. 執(zhí)行填充器文件

#php artisan db:seed --class=CommentTableSeeder

?

?

?

?

⑤評(píng)論模型創(chuàng)建起來

#php artisan make:model Home/Comment

?

?

?

?

定義其基本的屬性:

?

?

?

?

案例:查詢出每個(gè)文章(主)下所有的評(píng)論(從)。

關(guān)聯(lián)關(guān)系的編寫:

?

public function 被關(guān)聯(lián)的模型名小寫(){

?????????????????? return $this -> hasMany(‘需要關(guān)聯(lián)模型的命名空間’,’被關(guān)聯(lián)模型的關(guān)系字段,’本模型中的關(guān)系字段’);

}

?

與hasOne方法相比,其只是把方法名稱做了變化,其他與之前一致。

?

?

?

?

?

?

編寫test22方法實(shí)現(xiàn)上述案例的要求:

操作代碼:

?

?

?

效果:

?

?

?

?

?

?

3、多對多關(guān)系

例如:一個(gè)文章可能有多個(gè)關(guān)鍵詞,一個(gè)關(guān)鍵詞可能被多個(gè)文章使用。

?

?

?

當(dāng)點(diǎn)開關(guān)鍵詞鏈接之后,會(huì)發(fā)現(xiàn)一個(gè)關(guān)鍵下能搜出很多文章。

?

因此,文章和關(guān)鍵詞之間是多對多的關(guān)系。

?

對對多的關(guān)系經(jīng)過拆分之后其實(shí)就是兩個(gè)一對多的關(guān)系。由于是雙向一對多的關(guān)系,因此光靠2張表是無法建立的關(guān)系的,需要依靠第三張表建立關(guān)系(xx與xx的關(guān)系表)。

?

當(dāng)前已經(jīng)存在文章表,因此還需要關(guān)鍵詞表和關(guān)系表。

?

關(guān)鍵詞表:

???????? 字段id??????????????????????? 主鍵

???????? 字段keyword?????????? 關(guān)鍵詞

?

文章與關(guān)鍵詞的關(guān)系表:

???????? 字段id??????????????????????? 主鍵

???????? 字段article_id???????? 文章id

???????? 字段key_id?????????????? 關(guān)鍵詞id

?

簡易模擬:

Id????? 關(guān)鍵詞????????????????????????????????????????? id????? 文章id???? 關(guān)鍵詞id

1?????? 芳華?????????????????????????????????????????????? 1?????? 1??????????????? 1

2?????? 馮小剛????????????????????????????????????????? 2?????? 1??????????????? 2

???????????????????????????????????????????????????????????????? 3?????? 2??????????????? 1

?

①創(chuàng)建需要遷移文件

#php artisan make:migration create_keyword_table

#php artisan make:migration create_relation_table

?

?

?

②編寫遷移文件的代碼

?

?

?

?

?

?

?

?

③執(zhí)行遷移文件生成數(shù)據(jù)表

#php artisan migrate

?

?

?

?

④生成測試的數(shù)據(jù)

#php artisan make:seeder KeywordAndRelationTableSeeder

?

?

?

?

編寫相關(guān)代碼:

?

?

?

?

執(zhí)行填充器文件:

#php artisan db:seed --class=KeywordAndRelationTableSeeder

?

?

?

?

⑤創(chuàng)建需要的模型

注意:根據(jù)手冊中記錄的語法要求,不需要給關(guān)系表單獨(dú)的創(chuàng)建模型

該處只需要單獨(dú)給keyword創(chuàng)建模型即可

?

#php artisan make:model Home/Keyword

?

?

?

?

定義模型的基本內(nèi)部結(jié)構(gòu)

?

?

?

?

案例:查詢出每個(gè)文章下全部的關(guān)鍵詞

?

?

?

語法:return $this -> belongsToMany(被關(guān)聯(lián)模型的元素空間路徑,多對多模型的關(guān)系表名,當(dāng)前模型中的關(guān)系鍵,被關(guān)聯(lián)模型的關(guān)系鍵);

?

根據(jù)案例的要求,此處的關(guān)系映射依舊寫在文章模型中

?

?

?

?

編寫test23方法,實(shí)現(xiàn)剛才案例的需要:

?

?

?

顯示效果:

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Renyi-Fan/p/11579725.html

總結(jié)

以上是生活随笔為你收集整理的黑马lavarel教程---10、lavarel模型关联的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。