【问题标题】:Argument 1 passed to Illuminate\Database\Eloquent\Builder::create() must be of the type array传递给 Illuminate\Database\Eloquent\Builder::create() 的参数 1 必须是数组类型
【发布时间】:2020-02-23 15:26:53
【问题描述】:

我有一个模型,我打算将输入保存到两个不同的表中,但出现错误

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 作为两个表之间的连接器,并且该列不是主键(这是一个好习惯)?我可以将输入保存到Transcation_in 表,但仍然无法将输入保存到第二个表,而且我不知道如何将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');
}

DeviceType_idDevicebrand_id 是外键。

【问题讨论】:

  • 请发布您的迁移表和模型。 Transaction_inTransaction_in_detail 的至少迁移和模型。

标签: php laravel laravel-6 php-7.3


【解决方案1】:

我看到你在这行有问题

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

$transaction_in 是对象,create 方法需要传入array

如果其他一切都正确,这应该可以工作:

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

【讨论】:

  • 嗨,您的回答确实消除了错误,但我收到了一个新错误`SQLSTATE[23000]:完整性约束违规:1062 Duplicate entry '51' for key 'PRIMARY'(SQL:插入@987654326 @ (idTransaction_in, Supplier_id, tanggal_transaksi, updated_at, created_at, id) 值 (TIN-0051, 1, 2019-10-08, 2019-10-28 18:06:31 , 2019-10-28 18:06:31, 51)) `
  • 因为两个id被插入了两次。尝试这样做而不是toArray$transaction_in->pull('id')->toArray()
  • 你的意思是像这样$lastid = Transaction_in::create($transaction_in->pull(id))->toArray();,它工作但给我另一个错误“使用未定义的常量 id - 假定为 'id'(这将在 PHP 的未来版本中引发错误)”跨度>
  • 您忘记将id 括在单引号中。复制我的确切代码
  • 对不起,我再打扰一次,但我有这个Call to undefined method App\Transaction_in::pull()
【解决方案2】:

您已经拥有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;

【讨论】:

  • 你的回答给了我另一个错误` SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: 'TIN-0082' for column blog.transaction_in_details.Transaction_in_id at row 1 (SQL:插入transaction_in_detailsTransaction_in_idDeviceType_idDeviceBrand_idspek_deviceharga_devicejumlah_devicetotal_harga_device)值(TIN-0082、2、1、234、234 , 234444, 54859896)) `
  • 不,不是。这是您其他代码的错误。我只回答你的问题,而不是修复你所有的代码。
  • 我觉得你需要更清楚你想问什么。
猜你喜欢
  • 2018-05-28
  • 1970-01-01
  • 2018-04-19
  • 2020-09-24
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多