Входные данные не сохраняются, как ожидалось в Laravel 6 - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть форма с динамическими таблицами, в которой я могу добавлять / удалять строки, я хочу сохранить данные в таблицу Transaction_in и Transaction_in_detail, когда я сохраняю данные в таблицу Transaction_in, таблица сохраняется, как и ожидалось, ноне с Transaction_in_detail.

Когда я отправляю данные независимо от того, сколько строк я помещаю в таблицу, сохраненные данные в таблице Transaction_in_detail всегда дают мне 10 всех пустых строк.

Transaction_in_detail table

Контроллер хранилища

public function store(Request $request)
{
    $request->validate([
        'supplier_id' => 'required',
        'transaction_in_date' => 'required|before_or_equal:today',
        'device_type_id' => 'required',
        'device_brand_id' => 'required',
        'device_spec' => 'required|max:255',
        'price' => 'required',
        'amount' => 'required',
        'total_price' => 'required',
        'keterangan' => 'Nullable',
    ]);

    $transaction_in = new Transaction_in();
    $transaction_in->idTransaction_in = "0";
    $transaction_in->Supplier_id = $request->input('supplier_id');
    $transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
    $transaction_in->save();

    foreach ($transaction_in as $tin) {
        $tdin[] = [
            'Transaction_in_id' => $transaction_in->id[$tin],
            'DeviceType_id' => $transaction_in->device_type_id[$tin],
            'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
            'spek_device' => $transaction_in->device_spec[$tin],
            'harga_device' => $transaction_in->price[$tin],
            'jumlah_device' => $transaction_in->amount[$tin],
            'total_harga_device' => $transaction_in->total_price[$tin]
        ];
        Transaction_in_detail::insert($tdin);
    }
    $transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);

    return redirect('/transactionsin')->with('success', 'Transaction success');
}

Ниже выводится dd().

$dd output

Я не знаю, где ошибка;это модель.

Transaction_in Модель

class Transaction_in extends Model
{
    protected $guarded = [];
    public function get_suppliers()
    {
        return $this->belongsTo(Supplier::class, 'Supplier_id');
    }
    public function get_devicetypes()
    {
        return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
    }
    public function get_devicebrands()
    {
        return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
    }
}

Transaction_in_detail Модель

class Transaction_in_detail extends Model
{
    protected $guarded = [];
    public function get_transction_in_id()
    {
        return $this->belongsTo(Transaction_in::class, 'Transaction_in_id');
    }
    public function get_devicetypes()
    {
        return $this->belongsToMany(DeviceType::class, 'DeviceType_id');
    }
    public function get_devicebrands()
    {
        return $this->belongsToMany(DeviceBrand::class, 'DeviceBrand_id');
    }
}

Форма внутри Transaction_in Просмотр и Store Controller из transaction_inController, оба DeviceType_id и DeviceBrand_id являются внешними ключами.

Эта таблица Transaction_in в базе данных работает, как и ожидалось.

Transaction_in table

Ответы [ 3 ]

1 голос
/ 05 ноября 2019

Удалите foreach в своей функции, и вы можете вставить данные непосредственно в таблицу транзакций в подробностях

public function store(Request $request)
    {
        ...
        $transaction_in->save();
        for($i=0; $i < count($request->device_brand_id); $i++){
         $tdin[] = array(
          'Transaction_in_id' => $transaction_in->id,
          'DeviceType_id' => $request->device_type_id[$i],
          'DeviceBrand_id' => $request->device_brand_id[$i],
          'spek_device' => $request->device_spec[$i],
          'harga_device' => $request->price[$i],
          'jumlah_device' => $request->amount[$i],
          'total_harga_device' => $request->total_price[$i]
        );
       }

      Transaction_in_detail::insert($tdin);

      $transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);

      return redirect('/transactionsin')->with('success', 'Transaction success');
 }
0 голосов
/ 05 ноября 2019

Я думаю, что все 10 строк обнулились из-за циклического подсчета столбцов таблицы.

ваш код

$transaction_in = new Transaction_in();
        $transaction_in->idTransaction_in = "0";
        $transaction_in->Supplier_id = $request->input('supplier_id');
        $transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
        $transaction_in->save();

        foreach ( $transaction_in as $tin) {
            $tdin[] = [
                'Transaction_in_id' => $transaction_in->id[$tin],
                'DeviceType_id' => $transaction_in->device_type_id[$tin],
                'DeviceBrand_id' => $transaction_in->device_brand_id[$tin],
                'spek_device' => $transaction_in->device_spec[$tin],
                'harga_device' => $transaction_in->price[$tin],
                'jumlah_device' => $transaction_in->amount[$tin],
                'total_harga_device' => $transaction_in->total_price[$tin]
            ];
            Transaction_in_detail::insert($tdin);
        }

Мой код

$transaction_in = new Transaction_in();
        $transaction_in->idTransaction_in = "0";
        $transaction_in->Supplier_id = $request->input('supplier_id');
        $transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
        $transaction_in->save();
$transaction_in1 = new Transaction_in();
        foreach ( $transaction_in1 as $tin) {
            $tdin[] = [
                'Transaction_in_id' => $transaction_in1->id[$tin],
                'DeviceType_id' => $transaction_in1->device_type_id[$tin],
                'DeviceBrand_id' => $transaction_in1->device_brand_id[$tin],
                'spek_device' => $transaction_in1->device_spec[$tin],
                'harga_device' => $transaction_in1->price[$tin],
                'jumlah_device' => $transaction_in1->amount[$tin],
                'total_harga_device' => $transaction_in1->total_price[$tin]
            ];
            Transaction_in_detail::insert($tdin);
        }
0 голосов
/ 05 ноября 2019

Ваш метод магазина немного странный, вот что я думаю вам следует сделать:

public function store(Request $request)
{
    $request->validate([
        'supplier_id' => 'required',
        'transaction_in_date' => 'required|before_or_equal:today',
        'device_type_id' => 'required',
        'device_brand_id' => 'required',
        'device_spec' => 'required|max:255',
        'price' => 'required',
        'amount' => 'required',
        'total_price' => 'required',
        'keterangan' => 'Nullable',
    ]);


    $transaction_in = new Transaction_in();
    $transaction_in->idTransaction_in = "0";
    $transaction_in->Supplier_id = $request->get('supplier_id');
    $transaction_in->tanggal_transaksi = $request->get('transaction_in_date');
    $transaction_in->save();

    Transaction_in_detail::create([
        'Transaction_in_id' => $transaction_in->id,
        'DeviceType_id' => $request->get('device_type_id'),
        'DeviceBrand_id' => $request->get('device_brand_id'),
        'spek_device' => $request->get('device_spec'),
        'harga_device' => $request->get('price'),
        'jumlah_device' => $request->get('amount'),
        'total_harga_device' => $request->get('total_price')
    ]);

    $transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);

    return redirect('/transactionsin')->with('success', 'Transaction success');
}
...