我正在研究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());
}
}
答案 0 :(得分:5)
将此变量添加到类:
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