2017-02-24 1 views
0

Ich habe 2 Modelle:Insert in vielen zu viel Beziehung Laravel 5

class Order extends Model 
{ 
    protected $fillable = ['user_id','name','surname','fathers_name','phone_number','city','post_office','comment']; 

    public function user() 
    { 
     return $this->belongsTo('App\User'); 
    } 

    public function products() 
    { 
     return $this->belongsToMany('App\Product', 'order_product'); 
    } 

} 

class Product extends Model 
{ 

    public function order() 
    { 
     return $this->belongsToMany('App\Order', 'order_product'); 
    } 

    public function category() 
    { 
     return $this->belongsTo('App\Category'); 
    } 
} 

3 Tabellen:

product: 
id 
name 
... 

order_product: 
id 
order_id 
prod_id 
qty 
... 

order 
id 
city 
phone 
... 

und 2 Arrays von Daten: Daten $ = $ Anfrage-> Ausnahme ('_ token', 'submit'); - Informationen über den Client $ order_content - Array mit Informationen über Produkte im Warenkorb

Also, die Frage ist, wie Sie alle diese Daten in DB einfügen? Ich habe versucht, über viele zu viele Einfügung zu lesen: sync, attach, etc .. aber nichts verstanden: c

Antwort

0

Stellen Sie sich vor, Sie haben ein Produkt mit ID 1. Und eine Bestellung mit ID 1. Das Produkt ist Teil der Bestellung, also musst du sie anhängen. Sie tun

$product = Product::find(1); 
$order = Order::find(1); 
$order->products()->attach($order->id); 

In Ihrem Fall hat jedoch Ihre Pivot-Tabelle mehr Daten, wie "Menge". Dann tun Sie,

$order->product()->attach($order->id, ['qty' => 2]); 

Bis jetzt waren wir nur ein einzelnes Produkt an eine Bestellung anfügen. Wenn Sie viele Produkte gleichzeitig anhängen möchten, tun Sie:

$order->products()->sync([ 
    $product->id => ['qty' => 1], 
    $product2->id => ['qty' => 3] 
]); 

Ich hoffe, dass dies hilft besser zu verstehen. Ich empfehle Ihnen, das Dokument immer wieder zu lesen, bis es Sinn macht.

+0

Es ist seltsam, aber in der order_product im bekommen nur das letzte Produkt von 3 in der Reihenfolge – Batmannn

+0

Das ist was tun: $ bestellen = (neue Bestellung) -> create ($ data); $ cart_content = Warenkorb :: content(); $ order_content = []; foreach ($ cart_content als $ key => $ cart_item) { $ order_content [$ schlüssel] ['id'] = $ cart_item-> id; $ order_content [$ key] ['qty'] = $ cart_item-> Menge; } foreach ($ order_content wie $ ORDER_ITEM) { $ order-> Produkte() -> sync ([ $ ORDER_ITEM [ 'id'] => [ 'Menge' => $ ORDER_ITEM [ 'Menge ']] ]); } – Batmannn

+0

Vielen Dank! Nach deiner Erklärung und dem Lesen von Dokumenten habe ich es verstanden! Hier ist die funktionierende Version: foreach ($ order_content als $ order_item) { $ order-> products() -> attach ($ order_item ['product_id'], ['qty' => $ order_item ['qty'], 'price' => $ order_item ['price']]); } – Batmannn

Verwandte Themen