는 Laravel 5.3을 사용하여, 나는 type
문자 속성 값의 값에 따라 belongsToMany
또는 hasMany
관계를 반환 내 Order
웅변 모델의 방법을 읽을 수 없습니다 .조건부 웅변 관계는 쓸 수 있지만 (열망로드)
Order
은 그 자체가 일대 다 관계로 MasterOrder
모델의 하위 모델입니다.
---------------
* MasterOrder *
-------+-------
|
O2M
|
+----------------+------------------+
| | |
----+------- ----+------- -----+------
* Order * * Order * * Order *
* Type = O * * Type = C * * Type = S *
-+---------- -+---------- -+----------
| Offer |CreditPack | Shipment
| | |
M2M M2M O2M
Order
모델의 관계는 내 items()
방법을 사용하여 내가 attach()
제공 및 신용 팩 및 create()
출하량 수 있어요 데이터를 삽입하고이없이 작동 할 때
public function items()
{
$types = [
'S' => Shipment::class,
'O' => Discount::class,
'C' => CreditPack::class
];
if ($this->type == 'C') {
return $this->belongsToMany($types['C'], 'credit_pack_order')
->withTimestamps();
}
if ($this->type == 'O') {
return $this->belongsToMany($types['O'], 'discounts')
->withTimestamps();
}
return $this->hasMany($types[$this->type]);
}
다음 어떤 문제. 데이터가 데이터베이스에 유지되고 모든 것이 필요합니다.
문제는 내가 MasterOrder
모델 (데이터를 삽입 할 때부터 시작 함)에서 시작하여 내 관계를로드하고자하는 경우 items()
을 읽을 수 없다는 것입니다.
나는 MasterOrder
에서 열망로드를 Order
데이터를 읽을 수 있지만,이 items()
를로드 할 때이 Order
특성을 읽을 수 없습니다처럼 는 것 같다.
Order
에서 시작하면 대신 읽을 수 있습니다.
모든 주문에 대해 데이터베이스를 두 번 쿼리하지 않도록 할 수있는 방법이 있습니까?
아무도 설명해 주시겠습니까?
를 사용하여 데이터를 검색 -이 :
의 관계가된다 관계 설정에 조건을 사용한다는 사실을 암시합니다. – Oddman
@Oddman 할 수 없습니다. 관계 중 하나가 다른 것과 다릅니다. '선적 (Shipment) '은 일대 다 (one to many)를 요구하는 반면, 다른 것들은 다 대다 (many to many) 다. – phaberest
두 가지 방법 중 하나가 있습니다. 각 관계에 대해 별도의 메서드를 사용하거나 (선호하는 메서드) 다형 관계를 사용하여 모든 방식으로 처리합니다. 문제는 item()이 다른 개체 컬렉션을 반환한다는 것이며 도메인 경계 문제입니다. 그렇게해서는 안됩니다. – Oddman