我有一個相當複雜的用戶架構需求,我想知道在laravel 4中構建模型的最佳方法。我嘗試使用數據透視表,但沒有成功。爲了保密,我每桌只放了幾個字段。Laravel 4 Model雄辯的關係
用戶
- ID
- 名
型材
- ID
- 提供商 個
地址
- ID
- COUNTRY_ID
- 城市
國家
- ID
- 名
公司
- ID
- 名
商店
- ID
- 名
下面是規則:
- 用戶可以有多個地址(發貨,開票......)
- 用戶可以有多個配置文件(用於社會登錄,在臉書上,谷歌...)
- 用戶可以有很多公司(用戶可以擁有多個公司)
- 用戶可以有許多商店(用戶可以擁有多個商店)
- 檔案可以有一個用戶
- 地址可以有一個用戶(一個地址可以被稱爲只有一個用戶)
- 地址可以有一個公司(地址可以被稱爲只有一家公司)
- 地址可以有一個店
- 地址可以有一個國家
- 國家可以有多個地址
- 公司可以有多個地址(發貨,開票......)
- 公司可以有許多商店
- 公司可以有很多用戶
- 店可以有多個地址(運費,結算...)
- 店可以有許多用戶
- 店可以有一個公司
我不是尋找「」的答案寫下來,我做模型,但在我看來,邏輯不夠好。例如,這裏的用戶和地址類:
class User extends SentryUserModel implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
public function addresses() {
return $this->hasMany('Address');
}
}
class Address extends Eloquent {
public function user() {
return $this->belongsTo('User');
}
}
構建模型以這樣的方式意味着,口才預計在地址表中找到「USER_ID」字段。在我看來,最好使用數據透視表,因爲地址可以屬於用戶,公司和商店,所以在地址表中使用user_id,company_id和shop_id表字段或使用三個數據透視表(user_address, company_address和商店地址)?
數據透視表將爲用戶和公司構建,因爲它是一個多元關係。
我要感謝他,但它的工作原理,如果在用戶級的我用
public function addresses() {
return $this->morphMany('Address', 'addressable');
}
,並在地址I類使用
public function addressable() {
return $this->morphTo();
}
在這種@MartinBean答案後方式我可以輕鬆打印檢索第一個當前用戶地址
$user->addresses->first()->address
,並從當前用戶
Address::first()->addressable->email
的首地址獲取用戶的電子郵件,但你向我指出正確的方向,我認爲,多態關係,只是爲了更好地理解它爲什麼不轉動?你認爲樞軸對用戶 - 公司關係來說是否必要?
你嘗試過這麼遠嗎? Stack Overflow不是讓專業開發人員免費爲你工作的網站。 – 2014-12-01 17:25:28
嗨@MartinBean,閱讀更好的我的問題你是對的,似乎我要求一個工作,但事實並非如此,我寫了一個更新,請回滾投票。謝謝 – poisons 2014-12-01 18:11:23
我製作了'Address'多態,因爲您希望能夠在多個模型中使用地址。對於加入模型 - 就像屬於公司的用戶 - 然後我會使用數據透視表。 – 2014-12-03 16:29:45