我有一个型号名称todo。
> <?php
>
> namespace App;
>
> use Illuminate\Database\Eloquent\Model;
>
> class todo extends Model {
>
>
>
> }
我的路线:
Route::get('todo', 'pagesController@index');
Route::get('/todo/{id}','pagesController@show');
我的控制员:
public function index()
{
$todo = DB::table('todo')->get();
return view('pages.todo')->with('todo',$todo);
}
public function show($id)
{
$dos = todo::findOrFail($id);
return ($dos);
}
索引方法正在运行。 但show()给了我一个奇怪的错误。
SQLSTATE [42S02]:未找到基表或视图:1146表'app2.todos'不存在(SQL:select {from todos
where todos
。{{1 }} = 1限制1)
它很奇怪,因为它总是为TODOS而不是todo,这是正确的名称。我在代码中的任何地方都找不到TODOS。我甚至搜索了待办事项。没有。那么这是怎么发生的呢? 有什么建议吗?
答案 0 :(得分:3)
这是一个Laravel会议。如果在模型类中没有定义表名,则它将表名称假定为模型类名的复数形式。您可以在Model类中使用自己的常规表名覆盖,如下所示。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class todo extends Model {
protected $table = 'todo';
}
顺便说一下,使用首字母大写命名一个类也是一种约定。所以它应该是Todo
。
答案 1 :(得分:1)
todos因为在查找表名时Laravel中有一个函数用于复数单词。 show方法看不到todo,因为todo来自索引方法。 你应该在构造函数中将$ todo设置为一个新的TodoModel实例。 或者像在索引方法中那样第二次使用show方法。
答案 2 :(得分:0)
您必须通过$ table属性在模型中指定表名。这是laravel惯例。否则laravel会处理复数形式的表格名称。
示例:
如果您的模型类名称是“User”。如果您没有明确地在模型类中定义表名,Laravel会假设您的表名是“用户”。最好告诉您的模型类哪个表将通过此模型实现。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
//it will effect user table because you define it here otherwise laravel will assume 'users' table
protected $table = 'user';
}