我从数据库和本地存储中删除图像的方法。
public function destroy($id) {
$image = DB::table('images')->where('id', '=', $id)->first();
//print_r($image);
//return 'end';
File::delete(public_path() . '/images/gallery/thumb-' . $image->path);
File::delete(public_path() . '/images/gallery/' . $image->path);
$image->delete();
return Redirect::back()
->with('form_success', 1)
->with('form_message', 'Image successfully deleted!');
}
如果我尝试返回$image
的值,我会:
stdClass Object ( [id] => 49 [site_id] => 1 [page_id] => [location] => gallery [alt] => [path] => 60e52a2755ffe8923d5ac1232f5d9154.jpg )
我的代码出了什么问题?现在我的Laravel版本是4.2.1,但我尝试将他降级到4.1.17,但没有变化。
答案 0 :(得分:5)
问题是一旦你调用first()
,就会执行查询并返回结果。在致电delete()
之前,您必须致电first()
。
DB::table('images')->where('id', $id)->delete();
由于您正在使用查询构建器,因此您将看到正如您所见的stdClass
对象(没有删除方法),而不是使用Eloquent时通常会获得的模型。
答案 1 :(得分:0)
根据以下内容更改您的代码,我希望您的问题能够得到解决..
public function destroy($id) {
$query = DB::table('images')->where('id', '=', $id);
$image = $query->first();
//print_r($image);
//return 'end';
File::delete(public_path() . '/images/gallery/thumb-' . $image->path);
File::delete(public_path() . '/images/gallery/' . $image->path);
$query->delete();
return Redirect::back()
->with('form_success', 1)
->with('form_message', 'Image successfully deleted!');
}
first()和delete()这些函数执行代码。首先将条件分配给变量然后单独执行。谢谢