W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
遠程「一對多」關聯(lián)提供了方便、簡短的方式通過中間的關聯(lián)來獲得遠層的關聯(lián)。例如,一個 Country
模型可以通過中間的 User
模型獲得多個 Post
模型。在這個例子中,你可以輕易地收集給定國家的所有博客文章。讓我們來看看定義這種關聯(lián)所需的數據表:
countries
id - integer
name - string
users
id - integer
country_id - integer
name - string
posts
id - integer
user_id - integer
title - string
雖然 posts
表中不包含 country_id
字段,但 hasManyThrough
關聯(lián)能讓我們通過 $country->posts
訪問到一個國家下所有的用戶文章。為了完成這個查詢,Eloquent 會先檢查中間表 users
的 country_id
字段,找到所有匹配的用戶 ID 后,使用這些 ID,在 posts
表中完成查找。
現在,我們已經知道了定義這種關聯(lián)所需的數據表結構,接下來,讓我們在 Country
模型中定義它:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Country extends Model
{
/**
* 當前國家所有文章
*/
public function posts()
{
return $this->hasManyThrough('App\Models\Post', 'App\Models\User');
}
}
hasManyThrough
方法的第一個參數是我們最終希望訪問的模型名稱,而第二個參數是中間模型的名稱。
當執(zhí)行關聯(lián)查詢時,通常會使用 Eloquent 約定的外鍵名。如果你想要自定義關聯(lián)的鍵,可以通過給 hasManyThrough
方法傳遞第三個和第四個參數實現,第三個參數表示中間模型的外鍵名,第四個參數表示最終模型的外鍵名。第五個參數表示本地鍵名,而第六個參數表示中間模型的本地鍵名:
class Country extends Model
{
public function posts()
{
return $this->hasManyThrough(
'App\Models\Post',
'App\Models\User',
'country_id', // 國家表外鍵...
'user_id', // 用戶表外鍵...
'id', // 國家表本地鍵...
'id' // 用戶表本地鍵...
);
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: