Аргумент 1, передаваемый в Illuminate \ Database \ Eloquent \ Builder :: create (), должен иметь тип массива - PullRequest
0 голосов
/ 28 октября 2019

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

Symfony \ Component \ Debug \ Exception \ FatalThrowableError Аргумент 1 передан в Illuminate \ Database \ Eloquent \Builder :: create () должен иметь тип массива, данный объект вызывается в C: \ xampp \ htdocs \ blog \ vendor \ laravel \ framework \ src \ Illuminate \ Support \ Traits \ ForwardsCalls.php в строке 23

первая таблица Transaction_in, а вторая Transaction_in_detail. Я планировал использовать idTransaction_in в качестве соединителя между двумя таблицами, и этот столбец не является primaryKey (это хорошая практика)? Я могу сохранить входные данные в таблицу Transcation_in, но все еще не смог сохранить входные данные во 2-ю таблицу, и я не знаю, как сделать столбец idTransaction_in в качестве соединителя.

public function store(Request $request)
{
    $request->validate([
        'supplier_name' => 'required',
        'transaction_in_date' => 'required|before_or_equal:today',
        'device_type_name' => 'required',
        'device_brand_name' => '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_name');
    $transaction_in->tanggal_transaksi = $request->input('transaction_in_date');
    $transaction_in->save();
    $transaction_in->update(['idTransaction_in' => sprintf('TIN-%04d', $transaction_in->id)]);

    $lastid=Transaction_in::create($transaction_in)->idTransaction_in;
    if(count($request->device_type_name)>0){
        foreach ($request->device_type_name as $item => $v) {
            $data2=array(
                'Transaction_in_id' => $lastid,
                'DeviceType_id' => $request->device_type_name[$item],
                'DeviceBrand_id' => $request->device_brand_name[$item],
                'spek_device' => $request->device_spec[$item],
                'harga_device' => $request->price[$item],
                'jumlah_device' => $request->amount[$item],
                'total_harga_device' => $request->total_price[$item]
            );
            Transaction_in_detail::insert($data2);
        }
    }

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

The DeviceType_id и Devicebrand_id - внешний ключ.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

У вас уже есть save данные, но вы также используете create. Это создаст дубликаты записей в вашей БД.

Я дам вам решение:

$transactionIn = Transaction_in::create([
    'idTransaction_id' => '0',
    'supplier_id' => $request->input('supplier_name') // why supplier name assigned supplier_id?
    'tanggal_transaksi' => $request->input('transaction_in_date'),
]);

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

$lastId = $transactionIn->idTransaction_in;
0 голосов
/ 28 октября 2019

Как я вижу, у вас есть проблема в этой строке

$lastid=Transaction_in::create($transaction_in)->idTransaction_in;

$transaction_in является объектом, а метод create требует передачи array.

Если все остальноеисправить это должно работать:

$lastid=Transaction_in::create($transaction_in->toArray())->idTransaction_in;
...