[英]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()
函數來做同樣的事情。 我應該將它們放入user
和category
模型中。 無論如何,我什么時候應該使用hasOne()
或belongsTo()
?
處理1對多關系時,您將擁有hasMany()
和belongsTo()
。
我使用的經驗法則是,如果一個表有一個外鍵(票證表有一個user_id
fk),那么這個模型belongsTo
用戶。 與分類相同。
所以上面的例子, Ticket
belongsTo
User
和Category
。
相反, 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.