Laravel 5 SQLSTATE [42S02]:找不到基表或视图

时间:2016-07-26 05:28:07

标签: php laravel laravel-5 repository

我正在研究Laravel中的存储库设计模式,并且我使用https://github.com/andersao/l5-repository来完成它。

我想我在我的项目中安装成功。但是,当我使用存储库运行代码时,我遇到了一些问题

  

SQLSTATE [42S02]:找不到基表或视图:1146表   ' test.nhanviens'不存在(SQL:select * from nhanviens

我的数据库中的表是Nhanvien not Nhanviens

这里是我的代码

NhanvienRepository.php

<?php

   namespace App\Repositories;

   use Prettus\Repository\Contracts\RepositoryInterface;

   /**
    * Interface NhanvienRepository
    * @package namespace App\Repositories;
    */
   interface NhanvienRepository extends RepositoryInterface
   {
       //
   }

NhanvienRepositoryEloquent.php

<?php

 namespace App\Repositories;

use Prettus\Repository\Eloquent\BaseRepository;
use Prettus\Repository\Criteria\RequestCriteria;
use App\Repositories\NhanvienRepository;
use App\Entities\Nhanvien;
use App\Validators\NhanvienValidator;

/**
 * Class NhanvienRepositoryEloquent
 * @package namespace App\Repositories;
 */
class NhanvienRepositoryEloquent extends BaseRepository implements NhanvienRepository
{
    /**
     * Specify Model class name
     *
     * @return string
     */
    public function model()
    {
        return Nhanvien::class;
    }



    /**
     * Boot up the repository, pushing criteria
     */
    public function boot()
    {
        $this->pushCriteria(app(RequestCriteria::class));
    }
}

DataController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\nhanvien;
use App\Repositories\NhanvienRepository;

class DataController extends Controller
{
    protected $repository;

    public function __construct(NhanvienRepository $repository){
        $this->repository = $repository;
    }

    public function DanhSach(){
        var_dump($this->repository->all());
    }
}

4 个答案:

答案 0 :(得分:5)

来自App \ Nhanvien.php的

将此变量添加到类:

 protected $table = 'nhanvien';

说明:“蛇案例”,该类的复数名称将用作表名,除非明确指定了其他名称。因此,在这种情况下,Eloquent将假设nhanvien模型将记录存储在nhanviens表中。

答案 1 :(得分:1)

official Eloquent documentation中所述,您需要在模型定义中专门设置表名。也就是说,在App \ Nhanvien.php文件中设置以下内容:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Nhanvien extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'Nhanvien';
}

或使用

protected $table = 'nhanvien';

相反,如果你的表名是小写的。

答案 2 :(得分:0)

检查您的迁移文件,也许您正在使用 Schema::table ,如下所示:

  

Schema :: table('table_name',function($ table){       // ...});

如果要创建新表,则必须使用Schema :: create:

 Schema::create('table_name', function ($table)  {
     // ... });

有关更多信息,请参见Laravel migration documentation

如果您使用的是Schema::create,请提供迁移文件的内容。

答案 3 :(得分:-1)

在我的情况下,我通过执行命令

消除了类似的错误
github.com/gorilla/mux