【问题标题】:Laravel Error on inserting with foreach: Invalid argument supplied for foreach()使用 foreach 插入时 Laravel 错误:为 foreach() 提供的参数无效
【发布时间】:2020-10-18 06:01:43
【问题描述】:

我的 foreach 循环出了什么问题。

它给了我 ErrorException 为 foreach() 提供的参数无效

下面的代码成功保存了付款人,但在到达 foreach 时给了我上面的错误。

我该如何解决这个问题?

public function store(CreatePayerRequest $request)
    { 
       
   
        $input = $request->all();
        $payer = $this->payerRepository->create($input);
        {   
            $spouses = Spouse::find('id');
            foreach($spouses as $spouse){
                $spouses = new Spouse();
                $spouses->user_id = Auth::user()->id;
                $spouses->payer_id = 1;
                $spouses->spouse_occupation='NA';
                $spouses->spouse_name = $input['spouse_name'];
                $spouses->spouse_dob = $input['spouse_dob'];
                $spouses->spouse_emplbiz_add = $input['spouse_emplbiz_add'];
                $spouses->spose_income = $input['spose_income'];
                $spouses->save();
            }

【问题讨论】:

  • 我删除了我的答案,因为我注意到你正在覆盖循环 $spouses 内的变量 $spouses = new Spouse(); 但这就是你要循环的内容。因此,您立即更改数据类型。我认为您需要转储Spouse::find('id') 并检查它是否是可迭代对象,并更改循环内变量的名称。总而言之,我会说你不太清楚你想用这段代码做什么
  • 这里也好像有错字`$input['spose_income'];`
  • $spouses = Spouse::find('id'); 只返回一条记录...
  • @Makdous Spouse::find('id'); 可能会返回null'id' 是一个字符串

标签: php mysql laravel oop


【解决方案1】:

您向Spouse::find('id') 提供了无效参数。 'id' 将被视为string。它一定是返回了null,这是错误的原因。

您应该尝试类似:Spouse::find($id),因为 Laravel 还期望 idinteger

如果您想将模型中的主键设置为 id 以外的其他值,则find() 作用于主键

protected  $primaryKey = 'slug';

并将模型上的递增属性设置为 false:

public $incrementing = false;

【讨论】:

  • 但我试过了:Spouse::find($id) 它给了我 ErrorException 未定义的变量:id。我还应该做什么。
  • 是的,那是因为它应该是一个整数值。例如 Spouse::find(1) 将从配偶表中获取 id 为 1 的行。你使用 foreach 循环的目的是什么?
  • 我的目的是付款人可以有多个配偶,并且在我的婚姻状况下的创建付款人表格中,如果他们与一个或多个配偶结婚,我已经为配偶详细信息创建了一个可选的 livewire 表格。如果我删除了 foreach,并添加了 3 个配偶详细信息,则只有 3 个中的一个被保存,所以我认为 foreach 可以进行修复。到目前为止,我很感谢您的回答,希望这个解释能让我更容易理解并帮助我解决这个问题。
  • 好吧。如果配偶属于付款人。我假设您的付款人对象包含属性 ID。您需要将付款人 ID 指定为 Spouse::find($payer->id)。它将返回一条记录,并且您的循环将只执行一次。如果您尝试添加属于某个特定付款人的多个配偶,则需要更改控制循环的逻辑。
  • 谢谢,我已经使用了 $payer->id 并且它不再提供未定义的变量,但它仍然给出了为 foreach() 提供的无效参数的错误:foreach($spouses as $spouse .但是如果我删除了foreach,它就可以工作并且只插入一条记录。是的,我不想为付款人插入多个配偶。而且我还想要一个if语句,只有在有配偶要保存时才会运行。你能修复我的代码吗这样做的逻辑?提前致谢。
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多