2017-07-25 24 views
0

我有产品创建过程中的图片上传功能。这是控制器中createSubmit的功能Laravel查询正在寻找不存在的列

public function productsCreateSubmit() 
{ 

    $product = new Product; 
    $product->title = Input::get('title'); 
    $product->price = Input::get('price'); 
    if (Input::hasFile('image')) { 
     $file = Input::file('image'); 
     $filename = str_random(20); 
     $file->move('uploads/', $filename . '.' . $file->getClientOriginalExtension()); 
     $imagePath = 'uploads/' . $filename . '.' . $file->getClientOriginalExtension(); 
     $image = Image::make($imagePath); 

     if ($image->width() > 200) { 
      $image->resize(200, null, function ($constraint) { 
       $constraint->aspectRatio(); 
      }); 
     } 
     if ($image->height() > 200) { 
      $image->resize(null, 200, function ($constraint) { 
       $constraint->aspectRatio(); 
      }); 
     } 
     $image->save(); 
    } else { 
     $imagePath = 'default.png'; 
    } 
    $product->image = $imagePath; 
    $product->save(); 
    return Redirect::to('/admin/products'); 
} 

当我点击提交时,我收到数据库中的列没有默认值的错误。

SQLSTATE[HY000]: General error: 1364 Field 'file_id' doesn't have a default value (SQL: insert into products (title , price , image) values (test, 1, uploads/awy3CvVHLajER1E1gfpu.jpg))

的问题是,我没有在表中这样的列。这是产品的型号

class Product extends Eloquent 
{ 
    protected $table = 'products'; 
    protected $primaryKey = 'product_id'; 
    public $timestamps = false;   
} 

laravel如何决定插入/寻找此字段?

+0

您可以添加产品表的迁移文件 –

+0

我没有为此迁移。它是直接在phpmysql中创建的 – Ivan

+1

即使您没有在控制器中使用它,您是否确定数据库中没有该列? –

回答

1

如果你在你的数据库表列file_id,后藤在phpMyAdmin表的结构,那么在file_id列然后设置属性default to NULL前点击change并勾选Null checkmark。 点击保存!

重新运行项目!

1

这不是关于laravel,你的数据库中有一个file_id字段,它没有默认值,可能你也有一个files表。

同时节约laravel是设置只有三个领域:titlepriceimage但不file_id而且由于file_id没有默认值MySQL不知道如何处理填充它并返回一个错误。

您可以将file_id更改为可为空,并将其默认值设置为空。