나는 Laravel로 이것을 처음으로 배우는 데 많은 어려움을 겪었습니다. 이 문제의 가장 큰 장점은 마이그레이션을 사용하여 무언가를 시도하고 가장 좋은 방법이 아닌 경우 롤백하는 것입니다.
Eloquent는 [활성 레코드 패턴] [1]을 기반으로하므로 활성 레코드 가이드를 읽는 것이 큰 도움이됩니다. 당신은 [데이터베이스 정규화] [2]를 목표로 삼고 있습니다. RoR은 오랫동안 사용되어 왔고 동일한 패턴을 사용하기 때문에 "데이터베이스 정규화 레일"을 찾는 것이 더 좋았습니다.
나는 처음에했던 일을 계속하는 것이 더 쉽다는 것을 알게되었습니다.
supermarket->가
이 제품 -> 일 대 속한 많은 -> 제조 업체
제조사 :>을 많은 사람들 속한> 슈퍼마켓> 제조 업체
제조사 :>를 가지고 많은 -> 제품
제품에 항상 양이 있고 제품의 양이 많지 않은 경우 일반적으로 제품 테이블에 두는 것이 좋습니다. 일반적으로 제품에는 wholesale_amt, retail_amt가 있습니다.
당신이 단위 양 같은 경우 :
unit_amount table:
id | title
1 pallet
2 case
3 box
4 single
... 당신은 별도의 테이블에 그것을 넣어 것보다 있습니다. 그 이유는 쉽게 맞춤법 오류를 수정하고 한 곳에서만 다른 금액을 추가 할 수 있기 때문입니다. 개발자가 update sql에서 팔레트의 철자를 잘못 입력하면 제품 테이블에 약간 잘못된 맞춤법이 기록됩니다.
product table:
id | title | unit_amount
1 | water | 2
당신은 많은 관계로 많은 피벗 테이블이 필요합니다
제품 표는이 같은 ID를 저장하는 unit_amount 열을 가질 것이다. 제조업체가 많은 제품이있는 경우가 각각 새로운 기록이다
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 'manufacturers
왜냐하면'많은 것을 통해 '관계를 사용해야합니다.그 결과는 다음과 같습니다
이
$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
이 역은 비트를 얻을 수
class Manufacturer extends eloquent {
public function products {
return $this->hasMany('Product');
}
public function ingredients {
return $this->hasManyThrough('Ingredient', 'Product'); //has many ingredients through products
}
}
당신은 이런 관계를 조회 할 수 있습니다 더 혼란스럽게 여기에서 토론을 참조하십시오 :
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