国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Laravel學習筆記七-創(chuàng)建博客

icyfire / 872人閱讀

摘要:本節(jié)將使用用戶創(chuàng)建博文來學習數(shù)據(jù)模型關(guān)聯(lián)的有關(guān)知識。我們發(fā)現(xiàn)為我們生成的時間是英文的,如果要使用中文時間,則需要對進行本地化設(shè)置。動態(tài)屬性讓你能夠訪問關(guān)聯(lián)函數(shù),就像他們是在模型中定義的屬性會假設(shè)對應關(guān)聯(lián)的外鍵名稱是基于模型名稱的。

本節(jié)將使用用戶創(chuàng)建博文來學習數(shù)據(jù)模型關(guān)聯(lián)的有關(guān)知識。

一、Laravel常用知識總結(jié) 1.提示信息漢化

如果用Laravel原生的表單提示錯誤信息,則是英文的,如果需要中文,則需要修改resources/lang/en的英文,這樣比較麻煩,不過,我們可以使用github開源的漢化包,然后引入該文件夾,在config/app.php配置文件里邊修改語言包引入即可使用。

2.Carbon日期友好化處理

    {{ $status->created_at->diffForHumans() }}
  

該方法的作用是將日期進行友好化處理,我們可以使用 tinker 來查看該方法的具體輸出情況。

$ php artisan tinker

在 tinker 中輸出第一位用戶的創(chuàng)建時間如下。

>>> $created_at = AppModelsUser::first()->created_at
=> CarbonCarbon {#704
     +"date": "1998-12-06 03:15:31.000000",
     +"timezone_type": 3,
     +"timezone": "UTC",
   }

在 tinker 中調(diào)用 diffForHumans 方法來輸出,結(jié)果如下。

>>> $created_at->diffForHumans()
=> "17 years ago"

我們發(fā)現(xiàn) diffForHumans 為我們生成的時間是英文的,如果要使用中文時間,則需要對 Carbon 進行本地化設(shè)置。Carbon 是 PHP DateTime 的一個簡單擴展,Laravel 將其默認集成到了框架中。

三、Eloquent:關(guān)聯(lián)

數(shù)據(jù)表之間經(jīng)常會互相進行關(guān)聯(lián)。例如,一篇博客文章可能會有多條評論,或是一張訂單可能對應一個下單客戶。Eloquent 讓管理和處理這些關(guān)聯(lián)變得很容易,同時也支持多種類型的關(guān)聯(lián)。

定義關(guān)聯(lián)

你可在 Eloquent 模型類內(nèi)將 Eloquent 關(guān)聯(lián)定義為函數(shù)。因為關(guān)聯(lián)像 Eloquent 模型一樣也可以作為強大的 查詢語句構(gòu)造器(數(shù)據(jù)庫:查詢構(gòu)造器),定義關(guān)聯(lián)為函數(shù)提供了強而有力的鏈式調(diào)用及查找功能。例如:

$user->posts()->where("active", 1)->get();

不過,在深入了解使用關(guān)聯(lián)之前,先讓我們來學習如何定義每個類型:

1.一對一

一對一關(guān)聯(lián)是很基本的關(guān)聯(lián)。例如一個 User 模型也許會對應一個 Phone。要定義這種關(guān)聯(lián),我們必須將 phone 方法放置于 User 模型上。phone 方法應該要返回基類 Eloquent 上的 hasOne 方法的結(jié)果:

hasOne("AppPhone");
    }
}

傳到 hasOne 方法里的第一個參數(shù)是關(guān)聯(lián)模型的類名稱。定義好關(guān)聯(lián)之后,我們就可以使用 Eloquent 的動態(tài)屬性來獲取關(guān)聯(lián)紀錄。動態(tài)屬性讓你能夠訪問關(guān)聯(lián)函數(shù),就像他們是在模型中定義的屬性:

$phone = User::find(1)->phone;

Eloquent 會假設(shè)對應關(guān)聯(lián)的外鍵名稱是基于模型名稱的。在這個例子里,它會自動假設(shè) Phone 模型擁有 user_id 外鍵。如果你想要重寫這個約定,則可以傳入第二個參數(shù)到 hasOne 方法里。

return $this->hasOne("AppPhone", "foreign_key");

此外,Eloquent 的默認外鍵在上層模型的 id 字段會有個對應值。換句話說,Eloquent 會尋找用戶的 id 字段與 Phone 模型的 user_id 字段的值相同的紀錄。如果你想讓關(guān)聯(lián)使用 id 以外的值,則可以傳遞第三個參數(shù)至 hasOne 方法來指定你自定義的鍵:

return $this->hasOne("AppPhone", "foreign_key", "local_key");
定義相對的關(guān)聯(lián)

所以,我們可以從 User 訪問到 Phone 模型。現(xiàn)在,讓我們在 Phone 模型上定義一個關(guān)聯(lián),此關(guān)聯(lián)能夠讓我們訪問擁有此電話的 User。我們可以定義與 hasOne 關(guān)聯(lián)相對應的 belongsTo 方法:

belongsTo("AppUser");
    }
}
2. 一對多

一個「一對多」關(guān)聯(lián)使用于定義單個模型擁有任意數(shù)量的其它關(guān)聯(lián)模型。例如,一篇博客文章可能會有無限多個評論。就像其它的 Eloquent 關(guān)聯(lián)一樣,可以通過放置一個函數(shù)到 Eloquent 模型上來定義一對多關(guān)聯(lián):

hasMany("AppComment");
    }
}

切記,Eloquent 會自動判斷 Comment 模型上正確的外鍵字段。按約定來說,Eloquent 會取用自身模型的「蛇形命名」后的名稱,并在后方加上 _id。所以,以此例來說,Eloquent 會假設(shè) Comment 模型的外鍵是 post_id

一旦關(guān)聯(lián)被定義,則可以通過 comments 屬性來訪問評論的集合。切記,因為 Eloquent 提供了「動態(tài)屬性」,因此我們可以對關(guān)聯(lián)函數(shù)進行訪問,就像他們是在模型中定義的屬性一樣:

$comments = AppPost::find(1)->comments;

foreach ($comments as $comment) {
    //
}
定義相對的關(guān)聯(lián)

現(xiàn)在我們已經(jīng)能訪問到所有文章的評論,讓我們來接著定義一個通過評論訪問上層文章的關(guān)聯(lián)。若要定義相對于 hasMany 的關(guān)聯(lián),可在下層模型定義一個叫做 belongsTo 方法的關(guān)聯(lián)函數(shù):

belongsTo("AppPost");
    }
}
3. 多對多

多對多關(guān)聯(lián)要稍微比 hasOnehasMany 關(guān)聯(lián)復雜。如一個用戶可能擁有多種身份,而一種身份能同時被多個用戶擁有。舉例來說,很多用戶都擁有「管理者」的身份。要定義這種關(guān)聯(lián),需要使用三個數(shù)據(jù)表:usersrolesrole_userrole_user 表命名是以相關(guān)聯(lián)的兩個模型數(shù)據(jù)表來依照字母順序命名,并包含了 user_id 和 role_id 字段

多對多關(guān)聯(lián)通過編寫一個在自身 Eloquent 類調(diào)用的 belongsToMany 的方法來定義。舉個例子,讓我們在 User 模型定義 roles 方法:

belongsToMany("AppRole");
    }
}
定義相對的關(guān)聯(lián)

要定義相對于多對多的關(guān)聯(lián),只需簡單的放置另一個名為 belongsToMany 的方法到你關(guān)聯(lián)的模型上。讓我們接著以用戶身份為例,在 Role 模型中定義 users 方法:

belongsToMany("AppUser");
    }
}

如你所見,此定義除了簡單的參考 AppUser 模型外,與 User 的對應完全相同。因為我們重復使用了 belongsToMany 方法,當定義相對于多對多的關(guān)聯(lián)時,所有常用的自定義數(shù)據(jù)表與鍵的選項都是可用的。

關(guān)聯(lián)總結(jié) 1.一對一
$this->hasOne("AppPhone");
$this->belongsTo("AppUser");

hasOne 關(guān)聯(lián)相對應的 belongsTo 方法

2.一對多
$this->hasMany("AppComment");
$this->belongsTo("AppPost");

hasMany 關(guān)聯(lián)相對應的 belongsTo 方法

3.多對多
$this->belongsToMany("AppRole");
$this->belongsToMany("AppUser");

belongsToMany 關(guān)聯(lián)相對應的 belongsToMany 方法

4.查找關(guān)聯(lián)

你可以查找 posts 關(guān)聯(lián)并增加額外的條件至關(guān)聯(lián),像這樣:

$user = AppUser::find(1);
$user->posts()->where("active", 1)->get();

關(guān)聯(lián)方法與動態(tài)屬性

如果你不需要增加額外的條件至 Eloquent 的關(guān)聯(lián)查找,則可以簡單的像訪問屬性一樣來訪問關(guān)聯(lián)。例如我們剛剛的 User 及 Post 模型示例,我們可以像這樣來訪問所有用戶的文章:

$user = AppUser::find(1);

foreach ($user->posts as $post) {
    //
}
預加載

當通過屬性訪問 Eloquent 關(guān)聯(lián)時,該關(guān)聯(lián)數(shù)據(jù)會被「延遲加載」。意味著該關(guān)聯(lián)數(shù)據(jù)只有在你使用屬性訪問它時才會被加載。不過,Eloquent 可以在你查找上層模型時「預加載」關(guān)聯(lián)數(shù)據(jù)。預加載避免了 N + 1 查找的問題。要說明 N + 1 查找的問題,可試想一個關(guān)聯(lián)到 Author 的 Book 模型,如下所示:

belongsTo("AppAuthor");
    }
}

現(xiàn)在,讓我們來獲取所有書籍及其作者的數(shù)據(jù):

$books = AppBook::all();

foreach ($books as $book) {
    echo $book->author->name;
}

上方的循環(huán)會運行一次查找并取回所有數(shù)據(jù)表上的書籍,接著每本書會運行一次查找作者的操作。因此,若存在著 25 本書,則循環(huán)就會執(zhí)行 26 次查找:1 次是查找所有書籍,其它 25 次則是在查找每本書的作者。

很幸運地,我們可以使用預加載來將查找的操作減少至 2 次。可在查找時使用 with 方法來指定想要預加載的關(guān)聯(lián)數(shù)據(jù):

$books = AppBook::with("author")->get();

foreach ($books as $book) {
    echo $book->author->name;
}

對于該操作則只會運行兩次查找:

select * from books

select * from authors where id in (1, 2, 3, 4, 5, ...)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30545.html

相關(guān)文章

  • Laravel學習筆記之Seeder填充數(shù)據(jù)小技巧

    摘要:而且,與是一對多關(guān)系一個分類下有很多,一個只能歸屬于一個與是一對多關(guān)系一篇博客下有很多,一條只能歸屬于一篇與是多對多關(guān)系一篇有很多,一個下有很多。 說明:本文主要聊一聊Laravel測試數(shù)據(jù)填充器Seeder的小技巧,同時介紹下Laravel開發(fā)插件三件套,這三個插件挺好用哦。同時,作者會將開發(fā)過程中的一些截圖和代碼黏上去,提高閱讀效率。 備注:在設(shè)計個人博客軟件時,總會碰到有分類Ca...

    cgspine 評論0 收藏0
  • Laravel學習筆記之Errors Tracking神器——Sentry

    摘要:中異常處理類主要包含兩個方法和,其中就是主要用來向第三方發(fā)送異常報告,這里選擇向這個神器發(fā)送異常報告,并使用通知開發(fā)人員。通過也能發(fā)現(xiàn)的執(zhí)行流程。 說明:Laravel學習筆記之bootstrap源碼解析中聊異常處理時提到過Sentry這個神器,并打算以后聊聊這款神器,本文主要就介紹這款Errors Tracking神器Sentry,Sentry官網(wǎng)有一句話個人覺得帥呆了: Stop ...

    xiguadada 評論0 收藏0
  • Laravel不權(quán)威導航

    摘要:版微信第三方登陸包括微信微博等等,查看支持列表擴展好用的圖片處理,也方便使用百度版百度版支付集合,包含支付寶等支付寶在的封裝各國語言包,包含簡體中文生成二維碼工具,親測好用未完大家可以向我推薦,直接在本文下留言即可。 Laravel不權(quán)威導航 Hi 這里是Roy整理的Laravel相關(guān)索引,希望能幫到大家showImg(http://static.segmentfault.com/bu...

    focusj 評論0 收藏0
  • Laravel+OSS使用筆記

    摘要:為什么使用對象存儲對象存儲是云服務提供商面向企業(yè)和個人開發(fā)者提供的高可用,高穩(wěn)定,強安全的云端存儲服務。什么是阿里云對象存儲服務,簡稱,是阿里云提供的海量安全低成本高可靠的云存儲服務。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是永不停息的追求。 個人網(wǎng)站:https:/...

    CloudwiseAPM 評論0 收藏0
  • Laravel學習筆記一-開發(fā)環(huán)境搭建

    摘要:配置需要一個來用于與虛擬機進行連接,默認假定這個密鑰會被放在文件夾下。三使用管理項目版本使用可以對我們的代碼進行版本控制,如果萬一誤刪了代碼想回到之前的情況,則可以通過版本控制進行回滾。配置選項代表對進行全局設(shè)置。 laravel學習筆記,重新梳理知識點。 一、環(huán)境配置 1、編輯器選用 Atom PHPStorm SublimeText Atom 是由 GitHub 官方在 201...

    Galence 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<