日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

黑马lavarel教程---5、模型操作(AR模式)

發(fā)布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马lavarel教程---5、模型操作(AR模式) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

黑馬lavarel教程---5、模型操作(AR模式)

一、總結(jié)

一句話總結(jié):

AR: ActiveRecord :Active Record(活動記錄),是一種領(lǐng)域模型模式,特點是一個模型類對應(yīng)關(guān)系型數(shù)據(jù)庫中的一個表,而模型類的一個實例對應(yīng)表中的一行記錄。

?

1、Eloquent ORM:用模型操作數(shù)據(jù)庫?

ORM是對象關(guān)系模型
eloquent:英 ['el?kw?nt]:adj. 意味深長的

英 ['el?kw?nt]? 美 ['?l?kw?nt]
adj. 意味深長的;雄辯的,有口才的;有說服力的;動人的
[ 比較級 more eloquent 最高級 most eloquent ]

?

2、Laravel 自帶的 Eloquent ORM 介紹?

美觀、簡單的與數(shù)據(jù)庫打交道:Eloquent ORM 提供了一個【美觀、簡單】的與數(shù)據(jù)庫打交道的 ActiveRecord 實現(xiàn),每張數(shù)據(jù)表都對應(yīng)一個與該表進(jìn)行交互的“Model模型”,模型允許你在表中進(jìn)行數(shù)據(jù)查詢,以及插入、更新、刪除等操作。

?

3、AR模式三個核心(映射)?

1、每個【數(shù)據(jù)表】:與數(shù)據(jù)表進(jìn)行交互的Model【模型】映射(實例化模型)
2、記錄中的【字段】:與模型類的【屬性】映射(給屬性賦值)
3、表中的每個【記錄】:與一個完整的請求實例映射(具體的CURD操作)

?

4、定義模型注意事項?

第一:(必做)定義一個$table屬性,值是不要前綴的表名,如果不指定則使用類名的復(fù)數(shù)形式作為表名。如果模型為Member模型在不指定table屬性的情況下,其默認(rèn)會去找members表。修飾詞:protected
第二:(可選)定義$primaryKey屬性,值是主鍵名稱,如果需要使AR模式的find方法,則可能需要指定主鍵(Model::find(n)),在主鍵字段不是id的時候則需要指定主鍵。修飾詞:protected
第三: (可選)定義$timestamps屬性,值是false,如果不設(shè)置為false,則默認(rèn)會操作表中的created_at和updated_at字段,我們表中一般沒有這兩個字段,所以設(shè)置為false,表示不要操作這兩個字段。修飾詞:public
第四:(可選)定義$fillable屬性,表示使用模型插入數(shù)據(jù)時,允許插入到數(shù)據(jù)庫的字段信息。修飾詞:protected
class Member extends Model{//定義模型關(guān)聯(lián)的數(shù)據(jù)表(一個模型只操作一個表)protected $table='member'//定義主鍵(可選)protected $primaryKey=‘id';//定義禁止操作時間public $timestamps=false;//設(shè)置允許寫入的數(shù)據(jù)字段protected $fillable=['id','name','age','email]; }

?

?

5、模型定義時候的$fillable字段和$guarded字段的關(guān)系:protected $fillable=['id','name','age','email];?

相反:$fillable允許入庫的字段,使用$guarded是設(shè)置排除入庫的字段

?

6、使用模型中create插入數(shù)據(jù)時需要注意什么:比如向數(shù)據(jù)表中添加數(shù)據(jù):$result=$model->create($request->all());?

要設(shè)置$fillable允許入庫的字段,使用$guarded是設(shè)置排除入庫的字段

?

7、模型的使用:模型在控制器中的使用方式有2種?

①直接像使用DB門面一樣的操作方式:以調(diào)用靜態(tài)方法為主的形式,該形式下模型不需要實例化,例如:Member::get() 等價于 DB::table(‘member’) -> get();
②實例化模型然后再去使用模型類(普通):例如:$model = new Member();$model -> get();

?

8、Member::get() 和 DB::table(‘member’) -> get()的關(guān)系?

等價于:Member::get() 等價于 DB::table(‘member’) -> get();

?

9、AR模式三個核心映射 實例?

1、$member = new Member();?? ?//映射關(guān)系1:將表映射到模型
2、$member-> name = value;?? ?//映射關(guān)系2:將字段映射到屬性
3、$member -> save();????? //映射關(guān)系3:將記錄映射到實例
每個【數(shù)據(jù)表】:與數(shù)據(jù)表進(jìn)行交互的Model【模型】映射(實例化模型) 記錄中的【字段】:與模型類的【屬性】映射(給屬性賦值) 表中的每個【記錄】:與一個完整的請求實例映射(具體的CURD操作)注意:在laravel里面添加數(shù)據(jù)的時候,需要先實例化模型,然后為模型設(shè)置屬性,最后調(diào)用save方法即可。 $member = new Member(); //映射關(guān)系1:將表映射到模型 $member-> name = value; //映射關(guān)系2:將字段映射到屬性,屬性名和字段名一致 $member -> age = value; … $member -> save(); //映射關(guān)系3:將記錄映射到實例

?

?

?

10、模型增加數(shù)據(jù)操作兩種方法?

1、使用AR模式:$member = new Member(); $member-> name = value; $member -> save();
2、Member::create($request->all())

?

11、Member::all() 和 Member::get()的區(qū)別(都查詢多行并且指定字段) ?

all不支持連接其他的輔助查詢方法:Member::where('id','>',2)->all([' 列 1',' 列 2']); 會報錯

?

12、在laravel里面使用ORM模型方式更新數(shù)據(jù)需要怎么做?

麻煩:兩次操作數(shù)據(jù)庫:需要先調(diào)用模型的find方法獲取對應(yīng)的記錄,返回一個模型對象,然后為該模型對象設(shè)置要更新的數(shù)據(jù)(對象的屬性),最后調(diào)用save方法即可。
$user = User::find($id); $user->title = $_POST['title']; $user->content= $_POST['content']; return $user->save() ? 'OK' : 'fail';

?

?

13、在laravel里面使用ORM模型方式更新數(shù)據(jù)時,save并沒有指定操作的是哪條記錄,為什么save可以準(zhǔn)確操作?

|||-begin

$user = User::find($id); $user->title = $_POST['title']; $user->content= $_POST['content']; return $user->save() ? 'OK' : 'fail';

|||-end

模型調(diào)用對象一般是單例模式,所以前面User::find($id)的時候模型就是指定的這條數(shù)據(jù),所以save的時候更新的也就是這條數(shù)據(jù)

?

14、模型使用update方式更新?

$result=Member::where('id','7')->update(['age'=>82']);

?

?

二、模型操作(AR模式)

Laravel 自帶的 Eloquent ORM 提供了一個美觀、簡單的與數(shù)據(jù)庫打交道的 ActiveRecord 實現(xiàn),每張數(shù)據(jù)表都對應(yīng)一個與該表進(jìn)行交互的“Model模型”,模型允許你在表中進(jìn)行數(shù)據(jù)查詢,以及插入、更新、刪除等操作。

?

AR模式三個核心(映射):

每個數(shù)據(jù)表???????????????????????? 與數(shù)據(jù)表進(jìn)行交互的Model模型映射(實例化模型)

記錄中的字段???????????????????? 與模型類的屬性映射(給屬性賦值)

表中的每個記錄????????????????? 與一個完整的請求實例映射(具體的CURD操作)

1、定義模型

(1)定義位置

定義模型的位置,默認(rèn)是在app目錄下面,但是為了管理方便,建議分目錄進(jìn)行創(chuàng)建:

?

?

?

?

?

(2)命名規(guī)則

本身laravel對模型的命名沒有嚴(yán)格的要求,一般采用 ?表名(首字母大寫).php

比如:Member.php? User.php?? Goods.php

?

(3)創(chuàng)建模型

可以使用artisan命令;

[project] > php artisan make:model Home/Member

?

?

?

?

?

創(chuàng)建好的初始代碼:

?

?

?

?

(4)定義模型注意事項(重點)

?

第一:(必做)定義一個$table屬性,值是不要前綴的表名,如果不指定則使用類名的復(fù)數(shù)形式作為表名。如果模型為Member模型在不指定table屬性的情況下,其默認(rèn)會去找members表。修飾詞:protected

第二:(可選)定義$primaryKey屬性,值是主鍵名稱,如果需要使AR模式的find方法,則可能需要指定主鍵(Model::find(n)),在主鍵字段不是id的時候則需要指定主鍵。修飾詞:protected

第三: (可選)定義$timestamps屬性,值是false,如果不設(shè)置為false,則默認(rèn)會操作表中的created_at和updated_at字段,我們表中一般沒有這兩個字段,所以設(shè)置為false,表示不要操作這兩個字段。修飾詞:public

第四:(可選)定義$fillable屬性,表示使用模型插入數(shù)據(jù)時,允許插入到數(shù)據(jù)庫的字段信息。修飾詞:protected

?

?

?

?

?

?

?

注意:使用模型中create插入數(shù)據(jù)時,要設(shè)置$fillable允許入庫的字段,使用$guarded是設(shè)置排除入庫的字段。

?

2、模型控制器中調(diào)用

?

引入Member模型類;

?

?

?

?

?

模型的使用:模型在控制器中的使用方式有2

①直接像使用DB門面一樣的操作方式:以調(diào)用靜態(tài)方法為主的形式,該形式下模型不需要實例化,例如:Member::get() 等價于 DB::table(‘member’) -> get();

②實例化模型然后再去使用模型類(普通)

???????? 例如:$model = new Member();$model -> get();

3、定義測試路由

?

?

?

?

路由可以使用路由群組的方式進(jìn)行定義。

?

4、基本操作

(1)添加數(shù)據(jù)

在laravel里面完成數(shù)據(jù)的添加可以使用兩種方式:

方式一(AR模式):使用AR模式必須要實例化模型

注意:在laravel里面添加數(shù)據(jù)的時候,需要先實例化模型,然后為模型設(shè)置屬性,最后調(diào)用save方法即可。

$member = new Member(); //映射關(guān)系1:將表映射到模型

$member-> name = value; //映射關(guān)系2:將字段映射到屬性,屬性名和字段名一致

$member -> age = value;

$member -> save();??????????? //映射關(guān)系3:將記錄映射到實例

如果模型中不去關(guān)聯(lián)數(shù)據(jù)表,則會報以下的錯誤:

?

?

?

?

?

?

?

?

上面的這種方法可以完成數(shù)據(jù)的插入,但是不建議使用。我們可以使用laravel提供的更高級的操作。

?

?

?

方式二:

建立簡易表單,表單中有姓名、年齡、郵箱的字段,要求能夠提交

?

?

?

?

?

?

?

?

?

?

?

首先,在控制器文件引入Request這個類

use Illuminate\Http\Request;

Request類的使用:

①對象傳遞

?

?

?

?

②request語法(與input門面有點類似,方法名一致,但是input調(diào)用的是靜態(tài)方法,而當(dāng)前的不是)

$request->all()

$request->input('name');

$request->only([‘name1’,’name2’…])

$request->except([‘name1’,’name2’…])

$request->has(‘name’)

$request->get(‘name’)

?

添加操作代碼語法如下;

Member::create($request->all())//返回值是一個對象

?

?

?

?

注意:如果使用create方法,則需要在模型中定義fillable屬性,允許寫入字段的定義,如果沒有時間相關(guān)字段也需要禁用時間自動更新功能:

?

?

執(zhí)行的結(jié)果:

?

?

?

(2)查詢操作

獲取指定主鍵的一條數(shù)據(jù)

$info = Member::find(4); // 靜態(tài)方法調(diào)用,獲取主鍵為4的數(shù)據(jù)

?

?

?

其結(jié)果集默認(rèn)是一個對象。

?

如果需要在laravel中對象的結(jié)果集轉(zhuǎn)化成數(shù)組,則需要在最終添加方法的調(diào)用:

?-> get() -> toArray();

所以剛才的案例,如需要數(shù)組結(jié)果,則可以寫成:

$data = Member::find(4) -> toArray();

?

?

?

?

?

?

獲取符合指定條件的第一條記錄

Member::where("id",'>',4)->first();

?

?

?

?

查詢多行并且指定字段

Member::all()???

Member::all([字段1,字段2])???? //與get方法的區(qū)別,all不支持連接其他的輔助查詢方法

相當(dāng)于get方法

Member::get() ???

Member::get([字段1,字段2])

按條件查詢指定多個字段

Member::where('id','>',2)->get([' 列 1',' 列 2']);???????? //數(shù)組選列

Member::where('id','>',2)->select('列1','列2')->get(); //字符串選列

Member::where('id','>',2)->select( [' 列 1',' 列 2'] )->get(); //字符串選列

?

案例:測試在all方法之前,寫一些輔助方法實現(xiàn)連貫操作

?

?

?

?

?

?

(3)修改數(shù)據(jù)

注意:在laravel里面如果需要更新數(shù)據(jù)(ORM模型方式),需要先調(diào)用模型的find方法獲取對應(yīng)的記錄,返回一個模型對象,然后為該模型對象設(shè)置要更新的數(shù)據(jù)(對象的屬性),最后調(diào)用save方法即可。

例如:

$user = User::find($id);

$user->title = $_POST['title'];

$user->content= $_POST['content'];

return $user->save() ? 'OK' : 'fail';

?

案例:實現(xiàn)ORM形式模型的修改操作。修改為7 的用戶的郵箱地址為admin@itcast.cn

?

?

?

?

在AR模式中,更新操作的save并沒有指定操作的是哪條記錄,為什么save可以準(zhǔn)確操作

模型調(diào)用對象一般是單例模式,所以前面Member::find(7)的時候模型就是指定的這條數(shù)據(jù),所以save的時候更新的也就是這條數(shù)據(jù)

?

?

問題:能不能用模型去update呢?

答:可以使用update方法進(jìn)行更新,也可以使用AR模式的方式進(jìn)行更新。

?

?

?

(4)刪除數(shù)據(jù)

注意:在laravel里面如果要刪除數(shù)據(jù),如果需要使用AR模式刪除數(shù)據(jù)必須先根據(jù)主鍵id查詢對應(yīng)的記錄,返回一個模型對象,然后調(diào)用模型對象的delete方法即可。

例如代碼:

$user = User::find($id);

return $user->delete() ? 'ok' : 'fail';

?

案例:使用AR模式刪除id為7的記錄

?

?

?

?

?

問題:DB里面的刪除方式能否在模型中使用?【可以】

?

?

?

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

總結(jié)

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

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