2016-06-30 2 views
1

Я собираюсь установить конкретный предмет present с различными значениями поворота на один order. Я ищу вокруг что-то вроде:Laravel attach issue

$order->presents()->attach(1,[ 
    ['price' => '2400, 'qty' => 2], 
    ['price => '1000, 'qty' => 4] 
    ]); 

конечно его не действительным code.i может состыковать пункты один за другим:

$order->presents()->attach(1,['price' => '2400, 'qty' => 2]); 

$order->presents()->attach(1,['price => '1000, 'qty' => 4]); 

, но я думаю, что должно быть лучше, может кто-нибудь, дайте мне знать, как я могу скрепить связку?

ответ

0

Lookin at documentation Я вижу, что вы почти получили решение.

Ссылаясь на документацию, вы должны использовать массив, такой как array(id => [values]). В вашем случае:

$order->presents()->attach([ 
    1 => [ 
     'price' => 2400, 
     'qty' => 2 
    ], 
    .... 
]); 

Этот код не проверял.

Редактировать

При проверке attach() функцию в глубоких подземельях рамках Laravel можно увидеть также принимает модель, сбор или целое число. Когда вы смотрите дальше, вы можете увидеть его (возможно) также принимает массив идентификаторов.

/** 
* Attach a model to the parent. 
* 
* @param mixed $id 
* @param array $attributes 
* @param bool $touch 
* @return void 
*/ 
public function attach($id, array $attributes = [], $touch = true) 
{ 
    if ($id instanceof Model) { 
     $id = $id->getKey(); 
    } 

    if ($id instanceof Collection) { 
     $id = $id->modelKeys(); 
    } 

    $query = $this->newPivotStatement(); 

    $query->insert($this->createAttachRecords((array) $id, $attributes)); 

    if ($touch) { 
     $this->touchIfTouching(); 
    } 
} 

Не знаю, если это работает, но попробуйте:

$order->presents()->attach([1, 1], [[ 
      'price' => 2400, 
      'qty' => 2 
     ], [ 
      'price' => 1337, 
      'qty' => 420 
     ] 
    ] 
]); 
+0

Сразу отметим, что дубликат ключа массива не является допустимым в PHP. Я генерирую (присоединяю метод) данные с помощью цикла foreach, поэтому нет способа создать массив, как то, что вы представили в ответ на 'foreach' – alex

+0

Вы правы! Не заметил, что вы хотели дважды добавить один и тот же ресурс. Я сделаю еще несколько исследований и придумаю новый ответ, когда найду его. –

+0

@alex Я обновил свой ответ. –