【问题标题】:How do i insert array into database without getting error: Array to string conversion [duplicate]如何将数组插入数据库而不会出错:数组到字符串的转换[重复]
【发布时间】:2020-06-28 13:56:06
【问题描述】:

在 m 应用程序中,我有一个包含数据的表单,用于将数据插入 2 个表:付款人和配偶,付款人有很多配偶。在我的 PayerController 我有

public function store(CreatePayerRequest $request)
    { 
        $input = $request->all();
        $payer = $this->payerRepository->create($input);
        {

我有

dd($request->all())

并得到以下结果,表明我的数组从我的输入表单成功传递。

array:34 [▼
  "_token" => "LDdsaesoaRlKmM0URHVxQqyiJHdrPhLz3lmYQs6V"
  "added_on" => "2020-06-28 11:07:39"
  "user_id" => array:2 [▼
    0 => "Auth::user()->id"
    1 => "Auth::user()->id"
  ]
  "ass_code" => "508063"
  "title" => "Mr"
  "surname" => "PLC"
  "firstname" => "ZENITH"
  "othernames" => "A,"
  "dob" => "2020-06-28 12:08:59"
  "address" => "43"
  "street" => "Old School"
  "town" => "Umuguma"
  "lga" => "Okigwe"
  "state" => "Imo"
  "nationality" => "Nigerian"
  "occupation" => "Civil Servant"
  "vocation" => "Employment"
  "phone" => "8035514494"
  "email" => "ugo@yahoo.com"
  "income_status" => "Yes"
  "allowance_status" => "No"
  "acc_status" => "1"
  "assess_status" => "0"
  "approve_status" => "0"
  "payment_status" => "0"
  "authorize_status" => "0"
  "marital_stat" => "Married"
  "spouse_name" => array:2 [▼
    0 => "Tony"
    1 => "Nkechi"
  ]
  "spouse_dob" => array:2 [▶]
  "spouse_emplbiz_add" => array:2 [▼
    0 => "nA"
    1 => "nA"
  ]
  "spose_income" => array:2 [▼
    0 => "50000"
    1 => "50000"
  ]
  "child_status" => "Yes"
  "vehicle_status" => "Yes"
  "assets_status" => "Nigeria"
]

我的问题是,当我发送带有配偶数组的表单时,它给了我错误:

错误异常 数组到字符串的转换

我尝试过各种代码,例如

代码 1

 $payer->spouses()->create();
       

代码 2

 $spouses = Spouse::find($payer->id);
            foreach($request->spouses as $spouse){
                $payer->spouses()->create([
                    'user_id' => Auth::user()->id,
                    'spouse_occupation'=>NA,
                    'spouse_name'=>$spouse_name,
                    'spouse_dob'=>$spouse_dob,
                    'spouse_emplbiz_add'=>$spouse_emplbiz_add]);

代码 3:

$spouses = new Spouse();
                $spouses->user_id = Auth::user()->id;
                $spouses->payer_id = $payer->id;
                $spouses->spouse_occupation='NA';
                $spouses->spouse_name = $request->input('spouse_name');
                $spouses->spouse_dob = $request->input('spouse_dob');
                $spouses->spouse_emplbiz_add = $request->input('spouse_emplbiz_add');
                $spouses->spose_income = $request->input('spose_income');
                $spouses->save();

我不断收到同样的错误。

谁能告诉我如何在插入付款人的同时将数组中的配偶详细信息插入我的数据库。

在我正在关注的教程中,导师发送了以下代码,但它对我不起作用:

foreach($request->spouses as $spouse){
payer->spouses()->(['name'='$spouse'])

我认为这是因为他只有一个输入字段。但就我而言,我最多有 4 个。

我的配偶输入是一个带有以下代码的 livewire 组件

@foreach($spouses as $spouse)
   <div class="col-md-10 d-flex">
        
 {!! Form::hidden('user_id[]', 'Auth::user()->id',array(
    'class' => 'form-control col-3',
    'id' => 'user_id[]',
))  !!}
   {!! Form::text('spouse_name[]', '',array(
        'class' => 'form-control col-3',
        'id' => 'spouse_name[]',
        'placeholder' => 'Spouse name',
    ))  !!}
    {!! Form::text('spouse_dob[]', '',array(
        'class' => 'form-control col-3',
        'id' => 'spouse_dob[]',
        'placeholder' => 'Spouse Age',
    ))  !!}
    {!! Form::text('spouse_emplbiz_add[]', '',array(
        'class' => 'form-control col-3',
        'id' => 'spouse_emplbiz_add[]',
        'placeholder' => 'Work Address',
    ))  !!}
    {!! Form::text('spose_income[]', '',array(
        'class' => 'form-control col-3',
        'id' => 'spose_income[]',
        'placeholder' => 'Gross Income',
    )) !!}
    <span class="btn btn-default fa fa-times text-danger padding:2" 
    wire:click="remove({{$loop->index}})"></span>        
</div>
    @endforeach

【问题讨论】:

  • 代码 $payer = $this->payerRepository->create($input);运行并将付款人详细信息插入数据库。在添加配偶数组的下一阶段,我得到了错误,我猜因为我的配偶数据是一个数组,它必须以特定格式输入。检查上面的 3 个代码,您将分别看到它们的创建函数。
  • 您在某些代码 sn-ps 中使用了foreach 循环,但您使用的是spouses() 方法而不是$spouse 值?或者您使用数组$spouses 而不是$spouse 值...当您使用$spouse 而不是spouses()$spouses 时会发生什么?

标签: php arrays laravel oop


【解决方案1】:

您的错误准确地描述了您的问题。您正在尝试保存数组,因此出现此错误。

$spouses->spouse_name = $request->input('spouse_name');
            $spouses->spouse_dob = $request->input('spouse_dob');
            $spouses->spouse_emplbiz_add = $request->input('spouse_emplbiz_add');
            $spouses->spose_income = $request->input('spose_income');

所有这些数据都是数组。

"spouse_name" => array:2 [▼
  0 => "Tony"
  1 => "Nkechi"
]
"spouse_dob" => array:2 [▶]
"spouse_emplbiz_add" => array:2 [▼
  0 => "nA"
  1 => "nA"
]
"spose_income" => array:2 [▼
  0 => "50000"
  1 => "50000"
]

如果你的表中这些列的类型是json,那么你应该这样保存。

$spouses->spouse_name = json_encode($request->input('spouse_name'));
    $spouses->spouse_dob = json_encode($request->input('spouse_dob'));
    $spouses->spouse_emplbiz_add = json_encode($request->input('spouse_emplbiz_add'));
    $spouses->spose_income = json_encode($request->input('spose_income'));

【讨论】:

  • 感谢您的回答。尽管没有插入数据,但它停止了错误消息。我根据您的建议修改了我的代码 $input = json_encode($request->all()); $payer = $this->payerRepository->create($input);现在它丢失的 user_id 即使在你 DD 时也存在。 'user_id' 没有默认值。你认为最好做什么,
  • 如果您的列 user_id, spouse_name, spouse_dob, spouse_emplbiz_add, spose_income 没有 json 类型,那么我最好的建议是将它们的类型更改为 json,这将解决很多问题,你只需要像这样json_enocde($some_data)保存这个数据user_id, spouse_name, spouse_dob, spouse_emplbiz_add, spose_income,剩下的不是数组的数据,必须按照通常的方式保存$spouses-&gt;ass_code = $request-&gt;input('ass_code'), $spouses-&gt;title = $request-&gt;input('title'), ...
  • 另一种方法可能稍微复杂一点,并且在数据库中占用大量内存,这意味着您必须在数据中找到最大的数组,使用foreach,然后保存所有例如spouse_name 列的数据,其余列(不是数组)保存相同的数据,但我不推荐这种方法。
  • 当我在我的控制器中使用此代码时,它不会对包括 user_id 在内的所有内容进行编码吗? $input = json_encode($request->all());
  • 你不应该这样做json_encode($request-&gt;all()),你必须调用json_encode() 只为一个数组的数据,如user_id, spouse_name, spouse_dob, spouse_emplbiz_add, spose_income,但这只有在你的表中的这些列有 json 类型。
【解决方案2】:

您可以为付款人和配偶模型尝试类似的方法......

    $payer = new Payer();
    $payer->property =  $request->property;
    $payer->save();

if(count($request->spouse_name) > 0){
    for($i = 0; $i < count($request->spouse_name); $i++){

        $object = new Spouse();
        $object->payer_id = $payer->id
        $object->spouse_name= $request->spouse_name[$i];
        $object->save();

   } 
}

【讨论】:

  • 这个答案缺少教育解释。请总是解释你的答案......总是。为什么要求 php 一遍又一遍地计算同一件事?为什么不直接使用 foreach 并删除所有计数调用?
  • 我知道......但是当同时插入和更新数据时......它认为这是更好的解决方案......如果这里有任何建议请给我
  • 我看不到一次又一次地调用相同的count() 以获得相同的结果有什么好处。只是没有逻辑意义。这不是高级编码。
  • ( Product and ProductImage Model ) : 有时我不需要为产品模型插入图像或多个图像......这种情况我需要检查是否有任何子图像然后我会做操作......
  • 谁说过插入图片?你指的是不同的问题吗? Foreach 不会迭代空数组。你是 php 新手吗?
猜你喜欢
  • 2020-12-16
  • 2017-03-09
  • 2019-07-18
  • 1970-01-01
  • 2013-12-05
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多