Php Laravel使用可选图像更新记录

Php Laravel使用可选图像更新记录,php,orm,laravel,eloquent,Php,Orm,Laravel,Eloquent,我正在尝试重新创建一个简单的博客功能,并允许管理员更新博客文章 我的问题是,将其名称存储在blog表的“缩略图”下的照片没有得到正确更新。我的“保存新帖子”功能可以工作,但“更新”功能无法工作 当您在不更新图像的情况下进行更新时,其余的博客项目将被更新,但照片名称将被设置为空白;如果您尝试更新图像,照片将被移动,但数据库中的字段将被设置为临时位置(/Applications/MAMP/tmp/php/phpx1jwMA) 这可能是两个不同的问题 在更新表单中,我添加了一个带有照片名称的隐藏字段:

我正在尝试重新创建一个简单的博客功能,并允许管理员更新博客文章

我的问题是,将其名称存储在blog表的“缩略图”下的照片没有得到正确更新。我的“保存新帖子”功能可以工作,但“更新”功能无法工作

当您在不更新图像的情况下进行更新时,其余的博客项目将被更新,但照片名称将被设置为空白;如果您尝试更新图像,照片将被移动,但数据库中的字段将被设置为临时位置(/Applications/MAMP/tmp/php/phpx1jwMA)

这可能是两个不同的问题

在更新表单中,我添加了一个带有照片名称的隐藏字段:

{{ Form::hidden('old_photo', $blog->thumbnail) }}
它以预期的形式产生:

<input name="old_photo" type="hidden" value="1391122313-2013 12 01_0567.JPG">
我试图在代码中说,如果缩略图中有一个新文件,则创建一个唯一的名称,移动该文件并将“缩略图”设置为该名称(这就是我的创建函数的工作方式),但如果没有上传文件到“缩略图”,则将“缩略图”设置为旧名称

有没有更好的方法来处理这个过程?显然有,因为这种方式不起作用。我只是在学习拉威尔,我有3本关于它的书,但没有一本介绍如何做到这一点


谢谢

而不是
$blog->update($input)使用
$blog->save()。您已经修改了模型,请保存它。使用
update()
方法,传入的数组的所有键/值对都将分配给模型

你也不需要你的else案例。如果不想更改模型属性,请不要这样做。如果不想更改该值,则无需显式指定该值。 省略您的
else
案例

请注意:

手动指定模型属性,例如:

$model = Model::find(5);
$model->prop = 'val';
$model->save();
大多数时候都比他们好

$model->find(5)->update($newvalues); 
您可以更好地控制要插入和更新的内容,当批量分配时,您必须注意要分配的内容,否则每个属性都可以更改。这是一个安全问题。(不过,laravel配备了
$guarded
$filleble

同样,在您的情况下,您不希望传递整个输入,因为如果某些字段没有更改,您可能不希望这些字段得到更新。因此,如果没有任何更改,则必须明确排除在向其传递整个输入时不希望更新的键/值对(这是因为键存在,但值为空)

你明白我的意思了。当您手动分配值时,您可以完全控制分配的时间和内容


快乐编码

谢谢,我按照你的建议做了,并更新了上面的代码。照片现在可以正常工作,但如果进行了更改,这两个文本字段现在不会更新。您必须在创建模型之后(在
$blog=blog::find($id);
之后)和保存模型之前分配它们。只需执行
$blog->mytextindb=Input::get('mytextfield')
非常好,谢谢。我现在明白了。整个MVC很酷,但有时会让人困惑。没问题!一旦你习惯了它,它将使你作为一个开发者的生活变得轻而易举。顺便说一句,它与MVC没有多大关系。雄辩实现的模式称为ORM,以防您想进一步深入了解它!
$model->find(5)->update($newvalues);