laravel 如何将值数组插入到特定列中并提取该列

cnh2zyt3  于 2022-12-01  发布在  其他
关注(0)|答案(2)|浏览(150)

因此,我想将整个数组的值插入到特定的列中,但我不知道具体该怎么做。我所尝试的一切都给了我“数组到字符串转换”错误。
下面是我的控制器代码:

public function processInternationaTransfer(Request $request)
    {
    $international_info = Validator::make($request->all(), 
    [
        'beneficiary_name' => 'required',
        'beneficiary_acc_num' => 'required|numeric',
        'beneficiary_bank' => 'required',
        'beneficiary_swiftcode' => 'required',
        'routing_transit_no' => 'required|numeric',
        'currency' => 'required',
        'amount' => 'required|numeric',
        'note' => 'required',
    ]
    );

        if($international_info->fails())
        {
            return response()->json(['errors'=>$international_info->errors()->all()]);
        }
        $info = $international_info->validated();
        $balance = $info['currency'].'_balance';
        if(user_details()->$balance < InternationalAmount($info['amount']))
        {
            return response()->json(['insufficient_amount'=>'Insufficient Amount']);
        }
        else
        {
            TransactionLog::create([
                'username' => user()->username,
                'type' => 'Exchange',
                'cred_deb' => 'Debit',
                'time'=> Carbon::now('Africa/Lagos')->format('l, d F, Y g:i A'),
                'status' => 2,
                'amount'=>InternationalAmount($info['amount']),
                'currency'=>$info['currency'],
                'reason' => $info['note'],
                'inter_details' => $info,
                'transaction_id' => rand(100000000, 999999999),
            ]);
            return response()->json(['success'=>'Transaction Processed, Awaiting Confirmation']);
        }

    }

如何将该值数组插入到inter_details列中?
我试着像上面那样插入它,但它给了我“数组到字符串转换”的错误。我想在插入后能够取回它。

1wnzp6jl

1wnzp6jl1#

首先,您需要确保inter_details可以接受许多字符,最好的方法是在迁移中使用json()

$table->json('inter_details'); //it will create a longText column in database so that it can accept many characters.

然后向TransactionLogs模型添加强制转换

protected $casts = [
   'inter_details' => 'array',
]

通过这种方式,当你从数据库中获取inter_details时,你可以将其作为数组来访问,而不需要使用json_encode()json_decode()。如果你想以其他类型来访问casts,文档中有更多的内容
Eloquent:赋值函数和强制转换-属性强制转换

u5i3ibmn

u5i3ibmn2#

要将值数组插入到特定列中,需要使用DB facade的insert方法。insert方法将值数组作为其第一个参数,将表名作为其第二个参数。
例如,如果要将值数组插入到inter_details列中,可以执行以下操作:

$inter_details = [
    'beneficiary_name' => 'John Doe',
    'beneficiary_acc_num' => '12345678',
    'beneficiary_bank' => 'Bank of America',
    'beneficiary_swiftcode' => 'ABC123',
    'routing_transit_no' => '123456789',
    'currency' => 'USD',
    'amount' => '1000',
    'note' => 'This is a test transaction',
];

DB::table('transaction_logs')->insert([
    'inter_details' => json_encode($inter_details),
]);

json_encode()函数用于将数组转换为JSON字符串,然后将其存储在数据库中。
要从数据库中提取值数组,可以使用DB facade的select方法。例如:

$inter_details = DB::table('transaction_logs')->select('inter_details')->get();

$inter_details = json_decode($inter_details, true);

json_decode()函数用于将JSON字符串转换回数组,该函数的第二个参数设置为true,它告诉函数返回一个关联数组而不是对象。
现在,您已经拥有了存储在$inter_details变量中的值数组,您可以根据需要使用它。

相关问题