簡體   English   中英

即使我聲明了 $fillable,Laravel update() 也不能在 foreach 中工作

[英]Laravel update() not working in a foreach even though I have declared $fillable

我這里有一些相當難看的代碼:

foreach($request->assigned['standards'] as $standard){
            if(@$standard['plannings']) {
                foreach($standard['plannings'] as $p) {
                    dump($p['id']);
                    $assigned = PerformanceManagementSetModuleStandardAssignedPlanning::
                        where('id', $p['id'])
                        ->where('performance_management_set_assigned_id', $request->assigned_id)
                        ->first();
                    $assigned->text = $p['text'];
                    $assigned->user_id= 1; //I did this to check that the model was updating, it was
                    dump($assigned);
                    $assigned->update();
                }
            }
        }

記錄正在更新,除了“文本”列之外的所有內容。 我手動更新了“user_id”列只是為了確保,這個更新非常好。

我將文本作為可填充屬性:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class PerformanceManagementSetModuleStandardAssignedPlanning extends Model
{
    use HasFactory;

    protected $fillable = [
        'text',
    ];
}

當我轉儲( dump($assigned) )時,也可以在這里看到:

App\Models\PerformanceManagementSetModuleStandardAssignedPlanning {#1611
  #fillable: array:1 [
    0 => "text"
  ]
  #connection: "mysql"
  #table: "performance_management_set_module_standard_assigned_plannings"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  +preventsLazyLoading: false
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #escapeWhenCastingToString: false
  #attributes: array:7 [
    "id" => 307
    "performance_management_set_module_standard_id" => 92
    "performance_management_set_assigned_id" => 110
    "user_id" => 233
    "text" => "134523453452345345234123"
    "created_at" => "2022-05-12 10:06:24"
    "updated_at" => "2022-05-12 10:28:14"
  ]
  #original: array:7 [
    "id" => 307
    "performance_management_set_module_standard_id" => 92
    "performance_management_set_assigned_id" => 110
    "user_id" => 233
    "text" => null
    "created_at" => "2022-05-12 10:06:24"
    "updated_at" => "2022-05-12 10:28:14"
  ]
  #changes: []
  #casts: []
  #classCastCache: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: []
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #guarded: array:1 [
    0 => "*"
  ]
}

我在這里缺少一些簡單的東西嗎?

您可以使用 save() 方法進行該更新。

foreach($request->assigned['standards'] as $standard){
            if(@$standard['plannings']) {
                foreach($standard['plannings'] as $p) {
                   
                    $assigned = PerformanceManagementSetModuleStandardAssignedPlanning::
                        where('id', $p['id'])
                        ->where('performance_management_set_assigned_id', $request->assigned_id)
                        ->first();
                    $assigned->text = $p['text'];
                    $assigned->user_id= 1; //I did this to check that the model was updating, it was
                    $assigned->save();
                     dump($assigned);
                }
            }
        }

結果循環是什么覆蓋,每次都傳遞相同的ID。 感謝你的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM