使用数组/复选框/编辑对 null 调用成员函数 update()

问题描述 投票:0回答:2

这里需要帮助,我试图从复选框中获取值并将它们放入编辑中以将值“Estado”更改为“Expedido”,但是当我运行代码时,它给我错误“调用成员函数 update() on null”。我还尝试查找并将 find() 的默认值更改为我想要的列,并尝试使用原始 postgresql 代码。

        $chassis= $request->chassis;
    $escala = $request->escala;
    if(Auth::check() == true)
    {
       
        foreach($chassis as $chassis)
        {
            $edit = expedicoes::whereIn('Chassis', explode(',',$chassis))->first()->update(['Estado' =>'Expedido']);

        }
php laravel
2个回答
2
投票

方法

update(Array)
不存在于模型实例上,它仅作为 Builder 实例存在于查询构建器上。

删除

first()
调用来调用查询生成器上的更新

$edit = expedicoes::whereIn('Chassis', explode(',',$chassis))->update(['Estado' =>'Expedido']);

或者更新模型然后调用

save()

$edit = expedicoes::whereIn('Chassis', explode(',',$chassis))->first();
if ($edit) {
    $edit->Estado = 'Expedido';
    $edit->save();
}

我建议您从 foreach 循环中删除更新调用,收集所有“底盘”并运行单个查询

$extractedChassis = [];
foreach($chassis as $chassi)
{
    $extractedChassis = array_merge($extractedChassis , explode(',',$chassi));
}
expedicoes::whereIn('Chassis', $extractedChassis)->update(['Estado' =>'Expedido']);

0
投票

此代码返回 null

expedicoes::whereIn('Chassis', explode(',',$chassis))->first()

所以你没有机箱中的物品

explode(',',$chassis)

要解决此问题,您可以检查它是否不返回 null 然后更新它

 $expedicoes = expedicoes::whereIn('Chassis', explode(',',$chassis))->first();
if(expedicoes ){
expedicoes ->update(['Estado' =>'Expedido']);
}

但我认为你的问题在列名称中,所以尝试使用 chassis 而不是 Chassisestado 而不是 Estado

© www.soinside.com 2019 - 2024. All rights reserved.