我有很多麻煩先與Laravel一起學習。關於這個問題的好處是,你可以使用遷移來嘗試一些事情,如果它不是最好的方法,那麼就回滾它。
雄辯是基於[活動記錄模式] [1],所以閱讀活動記錄指南將是一個很大的幫助。你的目標是[數據庫規範化] [2]。由於RoR已經存在了很長時間,並且使用了相同的模式,所以我有更好的運氣搜索「數據庫規範化軌道」。
我發現它更容易繼續做你最初做的事情。
supermarket->有多對一>廠商
與製造商>屬於多對一>超市
產品 - >屬於單>製造商
與製造商>具有多對一>產品
如果一個產品總是有一定的數量,而一個產品沒有多少金額,那麼通常只需將其放在產品表上即可。通常情況下,產品將在桌面上有wholesale_amt,retail_amt。
如果您有類似的單位量:
unit_amount table:
id | title
1 pallet
2 case
3 box
4 single
...比你會提出,在一個單獨的表。原因是,您可以輕鬆修復拼寫錯誤,只在一處添加不同的金額。如果您的開發人員在更新SQL中拼錯了托盤,則不會在產品表中出現重複的有點拼寫錯誤的記錄。
產品表將有unit_amount列,存儲這樣的標識:
product table:
id | title | unit_amount
1 | water | 2
你只需要一個數據透視表的多對多關係。數據透視表應允許你這樣做的查詢是這樣的:
select * from manufacturer_product where manufacturer_id = 2
...,並得到生產廠家2.每一個產品最重要的是,如果製造商有很多產品,他們都是各自的新紀錄。
manufacturer_product table:
manufacturer_id | product_id
2 | 1
2 | 8
2 | 12
該系統類型的分崩離析,如果您有該表的warehouse_id也和廠商有900個產品,但2個倉庫:
manufacturer_id | product_id | warehouse_id
2 | 1 | 1
2 | 8 |
2 | 12 |
如果你有一大堆其他列的你1 。)返回一堆你不需要的數據2.)不能再使用雄辯的關係,並且3.)你要命名錶格是什麼?
Dayle里斯有說服力的關係,一個真棒指南這裏是真正幫助我:
http://daylerees.com/codebright/eloquent-relationships
我基本上要加載這些都與「產品」,這是相關的「成分」 to'製造商
因此,您需要使用'有很多通'的關係。它應該是這樣的:
class Manufacturer extends eloquent {
public function products {
return $this->hasMany('Product');
}
public function ingredients {
return $this->hasManyThrough('Ingredient', 'Product'); //has many ingredients through products
}
}
可以查詢這樣的關係:
$manufacturer = new Manufacturer;
$ingredients = $manufacturer->ingredients();
逆工程太:
class Ingredient extends eloquent {
public function products {
return $this->belongsToMany('Product');
}
public function manufacturer {
//this is actually belongToThrough but they don't call it that
return $this->hasManyThrough('Manufacturer', 'Product');
}
}
http://laravel.com/docs/4.2/eloquent#relationships
逆變得有點更容易混淆,請看這裏的討論:
https://github.com/laravel/framework/issues/6161
[1] http://en.wikipedia.org/wiki/Active_record_pattern [2] http://en.wikipedia.org/wiki/Database_normalization
非常感謝!這非常有幫助!我會試着實現它,看看我能得到多少:)如果你偶爾能夠拿回戰利品,那將會很好。我正在嘗試實現它,但我腦海中仍然有一些體面的大問號 – ptrckolous 2014-12-03 08:00:59