Добавление нескольких массивов дополнительных атрибутов в красноречивую вставку «многие ко многим» дает мне ошибку - PullRequest
0 голосов
/ 31 августа 2018

Я новичок в Laravel Framework. Если быть точным, я сейчас использую Laravel 5.6. Недавно у меня возникла проблема с вставкой отношения «многие ко многим» с массивом дополнительных атрибутов.

Вот мой сценарий:

$data = [
      "produk_id" => [
        0 => 17,
        1 => 7,
        2 => 2,
      ],
      "tarif" => [
        29290,
        119395,
        89873,
      ],
      "qty" => [
        0 => 4,
        1 => 6,
        2 => 13,
      ],
    ];

Transaksi::find(1)->produk()->attach($data['produk_id'], ['tarif'=>$data['tarif']]);

Это дает мне эту ошибку:

got some exception, but... the query seems to be true. hmmm...

Странно, что полученный запрос кажется правдивым. Но предупреждаю за некоторым исключением.

Итак, я затем изменил стратегию, чтобы сопоставить массив тарифов, который подходит для Красноречивой документации , например:

$data_tarif = array_map(function ($item) {
        return ['tarif' => $item];
    }, $data['tarif']);

И затем передать его второму параметру присоединения в качестве дополнительных атрибутов:

Transaksi::find(1)->produk()->attach($data['produk_id'], $data_tarif);

Но это все еще дает мне исключение, даже настолько далёкое от моих ожиданий:

So far from expectation query

Неправильно ли я использую этот метод присоединения с несколькими массивами дополнительного атрибута? Так как я попробовал с простым массивом или документацией Laravel, но они, кажется, не работают хорошо. что я должен сделать, чтобы исправить их?

Некоторые приложения, чтобы помочь:
Это моя модель Transaksi и модель Produk

class Transaksi extends Model
{
   protected $table = 'transaksi';

   public function user()
   {
      return $this->belongsTo(User::class, 'user_id');

   public function customer()
   {
      return $this->belongsTo(Customer::class, 'customer_id');
   }

   public function produk()
   {
      return $this->belongsToMany(Produk::class, 'detail_transaksi');
   }
}


class Produk extends Model
{
  protected $table = 'produk';

  public function transaksi() 
  {
      return $this->belongsToMany(Transaksi::class, 'detail_transaksi');
  }
}

1 Ответ

0 голосов
/ 31 августа 2018

попробуйте это:

$attachArray = array();
foreach ($data['produk_id'] as $index => $id) {
    $attachArray[$id] = ['tarif' => $data['tarif'][$index]];
}
Transaksi::find(1)->produk()->attach($attachArray);
...