输入数据未按预期存储在 Laravel 6 中

Input data is not stored as expected in Laravel 6

我有一个带有动态 table 的表格,其中我可以 add/remove 行,我想将数据保存到 Transaction_inTransaction_in_detail table,当我将数据保存到 Transaction_in 时,table 会按预期保存,但不会保存 Transaction_in_detail

当我提交数据时,无论我在 table 中放入多少行 Transaction_in_detail table 中保存的数据,总是给我 10 个所有空行。

店长

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().

的输出

不知道错在哪里;这是模型。

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_详细型号

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_inControllerDeviceType_idDeviceBrand_id都是外键。

这是 Transaction_in 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->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');
}

我认为所有 10 行都变为空,因为循环计算了 table 列的计数。

你的代码

$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);
        }

在你的函数中去掉foreach,你可以直接向事务中插入数据详细table

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');
 }