我有很多麻烦先与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