PHP Laravel save()不更新记录

时间:2017-12-15 08:40:29

标签: php laravel eloquent save

看起来这不是新问题。但我还没有发现任何真正的解决方案。 这是我的代码,预计它将起作用:

$update_pet=pets::where("pet_id",$pet['pet_id'])->get();
if($update_pet->count()>0){
    $update_pet=$update_pet->first();
    $update_pet->pet_breed_id=$pet_new['pet_breed_id'];
    $update_pet->save();
}

我确信$ pet ['pet_id']和$ pet_new ['pet_breed_id']有价值。 我确信数据库中的table pet_breeds主键为pet_id。系统可以连接数据库,因为我可以获得pet_id和新的pet_breed_id。 我确信我在模型中覆盖了表名和primaryKey值。

class pets extends Model
{
  protected $table="pets";
  protected $primaryKey="pet_id";
}

它甚至没有更新。 现在我只是直接使用DB :: update()来运行更新查询来解决问题。 但我还是想知道为什么会这样?或者编码有问题吗?或者保存功能现在不能在更新情况下使用?

4 个答案:

答案 0 :(得分:2)

为什么让事情变得复杂?

pets::find($pet['pet_id'])->update(['pet_breed_id' => $pet_new['pet_breed_id']]);

也要包括这一行:

protected $guarded = [];

或者这个:

protected $fillable = ['pet_breed_id'];

在您的宠物模型课程中。

最后一件事,你应该用资本开始你所有的班级名称。型号名称不应为复数。所以......

class Pet extends Model

答案 1 :(得分:1)

尝试获取对象而不是集合:

$pet = pets::find($pet['pet_id']);

if (!is_null($pet)) {
    $update_pet->pet_breed_id = $pet_new['pet_breed_id'];
    $update_pet->save();
}

此外,请确保通过在代码的第一行之后放置dd($pet);来获得正确的对象。

答案 2 :(得分:1)

您只需要将get()更改为first(),这样它只会返回一个数据。

$update_pet=pets::where("pet_id",$pet['pet_id'])->first();
if($update_pet->count()>0){
    $update_pet=$update_pet->first();
    $update_pet->pet_breed_id=$pet_new['pet_breed_id'];
    $update_pet->save();
}e

或者,如果您需要更新与where条件匹配的所有记录,请使用foreach

$update_pet=pets::where("pet_id",$pet['pet_id'])->get();
foreach ($update_pet as $pet) {
    if($pet->count()>0){
        $pet=$update_pet->first();
        $pet->pet_breed_id=$pet_new['pet_breed_id'];
        $pet->save();
    }
}

答案 3 :(得分:0)

您使用get方法将结果作为数组提供,因此请勿使用第一种方法执行此操作。如果pet_id是您的主键。

$update_pet=pets::where("pet_id",$pet['pet_id'])->first();
if($update_pet->count()>0){
   $update_pet=$update_pet->first();
   $update_pet->pet_breed_id=$pet_new['pet_breed_id'];
   $update_pet->save();
}

你在做什么样的东西$ update_pet->第3行的第一个。(