Search code examples
laravellaravel-5.1laravel-validationlaravel-migrationslaravel-request

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db.store' doesn't exist


When I try to save data from laravel form to a database table I am getting the following exception:

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'db.store' doesn't exist (SQL: select count(*) as aggregate from store where name = samplename)

the table store exists but still I am getting the error

this is my contoller that is processing the form:

 <?php

    namespace App\Http\Controllers;

    use Illuminate\Http\Request;

    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    use App\storestore;
    use App\Http\Requests\storeFormRequest;



    class AddstoreController extends Controller
    {
        //

        public function create()
        {
            //

        }

        public function store( storeFormRequest $request)
        {

            $store = new Store;
            $store->name = Input::get('name');
            $store->description = Input::get('description');
            $store->store_vendor_id = Input::get('owner');
            $store->contact_email = Input::get('contact_email');
            $store->postal_address = Input::get('postal_address');
            $store->city = Input::get('city');
            $store->zip = Input::get('zip');
            $store->phone = Input::get('phone');
            $store->business_logo = Input::get('logo');
            $store->save();
            return \Redirect::route('add_store_success')
          ->with('message', 'Thanks for joining us!');
        }
    }

This is my Store model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Store extends Model
{
    //

    protected $table = 'stores';

     protected $fillable = ['name', 'description', 'vendor_id',
     'contact_email','postal_address','city','zip','phone',
     'meta_description','business_logo'];

 }

StoreRequest file:

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;

use App\StoreController;


class StoreFormRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            //
    'name' => 'required|unique:dstore',
    'vendor_id' => 'required',
    'contact_email' => 'required|email|max:100|unique:dstore',

    'business_logo' => 'required',

        ];

         //validate
        if ($validation->fails())
        {
            return redirect()->back()->withErrors($v->errors());
        }

    }


}

These are the get and post routes:

Route::get('/store_form', ['as' => 'add_store_form', 'uses' => 'StoreController@create']);
Route::post('/store_form',['as' => 'dstore', 'uses' => 'StoreController@store']);

Both routes are listed when I run php artisan route:list command

I have tried to goggle for solution but the one I landed on pointed out to missing tables as a course, but in my case the store table is existing but still I am getting the error.

Any help please!


Solution

  • Look at your Store model class:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Store extends Model
    {
        //
    
        protected $table = 'stores';
    
         protected $fillable = ['name', 'description', 'vendor_id',
         'contact_email','postal_address','city','zip','phone',
         'meta_description','business_logo'];
    
    }
    

    As you see property $table is set to stores so I assume table name in your database is stores and not store.

    You should probably change in your StoreFormRequest content or rules method to use in unique rule valid table name, for example:

    public function rules()
    {
        return [
            //
    'name' => 'required|unique:stores',
    'vendor_id' => 'required',
    'contact_email' => 'required|email|max:100|unique:stores',
    
    'business_logo' => 'required',
    
        ];
    
         //validate
        if ($validation->fails())
        {
            return redirect()->back()->withErrors($v->errors());
        }
    
    }