【问题标题】:Posting arrays Laravel 8 - values returning as NULL发布数组 Laravel 8 - 返回为 NULL 的值
【发布时间】:2021-08-01 11:03:04
【问题描述】:

我正在尝试将一个数组从我的表单发布到数据库 表单字段显示为 NULL

HTML 表单摘录:

@foreach (range(0,9) as $x)
<div class="row m-3 credit-card-details">
  <div class="col-lg-4">
    <div class="form-group">
      <label for="financeCompany-{{ $x }}">Finance Company name #{{ $x }}</label>
      <input type="text" class="form-control" id="financeCompany-{{ $x }}" name="creditCards[{{ $x }}][financeCompany]" value="" placeholder="Finance Company Name" />
    </div>    
  </div>
  <div class="col-lg-4">
    <div class="form-group">
      <label for="creditLimit-{{ $x }}">Credit limit</label>
      <input type="text" class="form-control" id="creditLimit-{{ $x }}" name="creditCards[{{ $x }}][creditLimit]" value="" placeholder="$" />
    </div>    
  </div>
  <div class="col-lg-4">
    <div class="form-group">
      <label for="consolidate-{{ $x }}">Consolidate this card?</label>
        <input type="text" class="form-control" name="creditCards[{{ $x }}][consolidate]" id="consolidate-{{ $x }}" value="" />
    </div>    
  </div>
</div>
@endforeach

我的控制器:

 public function store(CreateApplicationRequest $request, Applicant $applicant, CreditCard $creditCard)
    {       
        
        
        $applicant = Applicant::create([
            ...
        ]);
        
        $application = $applicant->application()->create([
            ...
            ]); 
                        
             
        $creditCards = $request->input('creditCards');
        foreach ($creditCards as $creditCard)
        {
            $application->creditCards()->create([
                    'financeCompany' => $request->input('financeCompany'),
                    'creditLimit' => $request->input('creditLimit'),
                    'consolidate' => $request->input('consolidate')
                ]);
        }
        
      ...
}

我的 dd 结果显示如下:

在我的credit_cards 表中创建了适量的记录,并且application_id、created_at 和updated_at 字段被正确记录,但是financeCompany、creditLimit 和consolidate 字段(来自表格)都显示为NULL。

数据库:

信用卡型号:

protected $fillable = [
        'application_id',
        'financeCompany',
        'creditLimit',
        'consolidate'
    ];

数据库仅收集 application_id。

在这方面还是很新,任何帮助将不胜感激。

【问题讨论】:

  • 您好,$fillable 在模型中是什么样的?
  • @jeremykenedy 我已经更新了信用卡模型的摘录

标签: php mysql arrays laravel laravel-8


【解决方案1】:

所以你的request() 看起来有$creditCards。您感兴趣的值似乎在$creditCards

你需要做这样的事情

collect($creditCards)
    ->each(fn ($creditCard) => $application->creditCards()
        ->create([
            'financeCompany' => creditCard['financeCompany'],
            'creditLimit' => creditCard['creditLimit'],
            'consolidate' => creditCard['consolidate']
        ])
    );

或者如果你想使用 foreach

foreach ($creditCards as $creditCard) {
    $application->creditCards()->create([
        'financeCompany' => creditCard('financeCompany'),
        'creditLimit' => creditCard('creditLimit'),
        'consolidate' => creditCard('consolidate')
    ]);
}

【讨论】:

  • 感谢您的回答。这两个都为我产生了错误。第一个选项:ErrorException Use of undefined constant creditCards - assumed 'creditCards' (this will throw an Error in a future version of PHP) 第二个选项:Call to undefined function App\Http\Controllers\creditCard() 我似乎认为问题来自我对 $creditCards 的定义:$creditCards = $request-&gt;input('creditCards');
  • 我好像伪造了在信用卡变量前面添加$
  • 非常感谢,除此之外我觉得我尝试了其他所有方法!我非常感谢您的帮助:-)
  • 很高兴我能帮上忙。?
【解决方案2】:

确保您在模型中的 $fillable 中声明了它们,否则 ORM 不会拾取它们。

例子:

    protected $fillable = [
        'financeCompany',
        'creditLimit',
        'consolidate',
    ];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多