簡體   English   中英

了解Laravel中的hasOne()和belongsTo()函數

[英]Understanding hasOne() and belongsTo() functions in Laravel

我所要做的就是了解我應該何時使用hasOne()以及何時應該使用belongsTo() 兩者看起來都和我一樣。 例如,這是我的模型:

use Illuminate\Database\Eloquent\Model;
use App\Categories;
use App\User;


class tickets extends Model
{
    protected $table = "tickets";

    public function category()
    {
        return $this->hasOne(Categories::class, 'id', 'category_id');
    }

    public function user()
    {
        return $this->hasOne(User::class, 'id', 'user_id');
    }
}

我也可以通過使用belongsTo()函數來做同樣的事情。 我應該將它們放入usercategory模型中。 無論如何,我什么時候應該使用hasOne()belongsTo()

處理1對多關系時,您將擁有hasMany()belongsTo()

我使用的經驗法則是,如果一個表有一個外鍵(票證表有一個user_id fk),那么這個模型belongsTo用戶。 與分類相同。

所以上面的例子, Ticket belongsTo UserCategory

相反, User hasMany Ticket和類似的Category hasMany Ticket

無論如何,我什么時候應該使用hasOne()或belongsTo()?

認為它像什么是hasMany如果有一對多的關系在未來可能的。 例如:考慮用戶和手機型號。 關系的性質將是User hasOne Phone,但如果您想擴展其功能,那么用戶可以注冊多個電話號碼用戶仍然has*關系,而Phone將保持belongsTo關系。 只考慮哪一個可以是“父”實體,並且一個應該在方法中具有hasOne關系。 我總是將User視為父實體,對我來說邏輯上是用戶有一張票。 此外,嘗試堅持使用Eloquent / Laravel / artisan命名約定並命名模型Ticket和其他一個Category (Eloquent和Laravel將在需要時解析復數,即表名)。

這些是相同的,只有一個區別。 兩者都返回單個關聯對象,但有一個區別。 當我們將某個關系聲明為belongsTo時,它意味着有一個數據庫表,其中包含某個其他表的外鍵。 當我們聲明hasOne關系時,它意味着該表的主鍵已在另一個表中引用。 將其視為父子表。 當我們制作子表時,我們將每個孩子引用給它的父母,對嗎? 這是屬於 當我們創建父表時,我們知道父表中的每個條目在子表中都可以有一個或多個條目。 這是hasOne的hasMany關系。 如果您需要進一步澄清,可以進一步詢問。

hasOne是1:1或一對一的關系。

hasMany是1:n或一對多關系。

belongsTo中的belongsTo方法用於定義這些關系的反轉

這些的定義取決於您的數據模型。

在你的情況下:

你有一個Category模型,它有許多hasMany Ticket

您還有一個User模型,其中包含許多hasMany Ticket

現在從Ticket角度來看,您需要定義這兩個hasMany關系的反轉。 您將通過定義belongsTo來完成此belongsTo

因此Ticket belongsTo一個User並且belongsTo一個Category


回答你的問題:

Ticket的角度來看,它一個1:1的關系,因為Ticket模型中的外鍵指向1 User,類別外鍵指向1 Category。

但是,由於您所創建的關系是1:N(一到多),你還定義它的用戶和類別車型,你應該定義在您的機票模型這些關系的的關系,以及逆一個hasMany(和hasOne)是belongsTo

在Laravel中定義關系時,請記住數據庫模式,並以與數據庫模式中存在的關系相同的方式定義關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM