【问题标题】:How to update column value in laravel如何更新laravel中的列值
【发布时间】:2014-06-08 18:37:51
【问题描述】:

我有一个页面模型。它在数据库表中有以下列:

  • 身份证
  • 标题
  • 图片
  • 身体

我只想更新“图像”列值。

这是我的代码:

public function delImage($path, $id) {
    $page = Page::find($id);
    $page->where('image', $path)->update(array('image' => 'asdasd'));
    \File::delete($path);
}

它给我一个错误,我试图在非对象上使用 where()。如何正确更新我的“图像”列值?

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    你可以试试这个:

    Page::where('id', $id)->update(array('image' => 'asdasd'));
    

    还有其他方法,但在这种情况下不需要使用Page::find($id);。但是如果你使用find(),那么你可以这样尝试:

    $page = Page::find($id);
    
    // Make sure you've got the Page model
    if($page) {
        $page->image = 'imagepath';
        $page->save();
    }
    

    你也可以使用:

    $page = Page::findOrFail($id);
    

    因此,如果找不到具有该 id 的模型,它将引发异常。

    【讨论】:

    • $page = Page::find($id); $page->image = '图像路径'; $page->保存();这不起作用,它给我一个错误:“从空值创建默认对象”
    • 您在Page 模型中没有image 字段,并确保在使用$page = Page::find($id) 时在$page 中获得object/Model,所以$page = Page::find($id); if($page) { $page->image = 'imagepath'; $page->save(); }
    • 我确实有图片字段,我不需要提及所有其他字段才能成功保存我的页面吗?
    • 不,您不需要提及所有字段,只需提及您要更新的字段即可。
    • 好吧,这又是我的 ajax 请求的问题。无论如何,谢谢 :) 你是我的救星。
    【解决方案2】:

    我尝试使用

    更新字段
    $table->update(['field' => 'val']);
    

    但它不起作用,我必须修改我的表模型以授权编辑此字段:在数组“受保护的 $fillable”中添加“字段”

    希望对某人有所帮助:)

    【讨论】:

    • 成功了,谢谢!我知道有一个简单的模型更新,但这是在修补程序中报告“真实”但没有更新数据库。谢谢你。 :)
    • 还必须将列名放入 fillable 。此外,有时如果值的类型与 db 中的类型不匹配,它不会在运行时出现异常。根本不值一提。例如。如果有要发送的数字,则从 js ajax 以字符串形式出现。例如。 “0”。这样仔细检查类型
    【解决方案3】:

    版本 1:

    // Update data of question values with $data from formulay
    $Q1 = Question::find($id);
    $Q1->fill($data);
    $Q1->push();
    

    版本 2:

    $Q1 = Question::find($id);
    $Q1->field = 'YOUR TEXT OR VALUE';
    $Q1->save();
    

    如果有已回答的问题,您可以使用它们:

    $page = Page::find($id);
    $page2update = $page->where('image', $path);
    $page2update->image = 'IMGVALUE';
    $page2update->save();
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    • 它获取然后保存整个模型,因此它可能会竞争并发 http 查询
    【解决方案4】:

    试试这个方法简洁明了:

    Page::where('id', $id)
      ->update(['image' => $path]);
    

    来自 Laravel 文档的示例

    Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);
    

    【讨论】:

      猜你喜欢
      • 2021-10-04
      • 1970-01-01
      • 2019-03-16
      • 2020-12-12
      • 2020-10-25
      • 2017-04-24
      • 1970-01-01
      • 2017-06-10
      • 2020-09-15
      相关资源
      最近更新 更多