默认情况下,Laravel假定数据库表是模型名称的复数形式。但是,如果我仍然想要使用此功能,那么如果我的表名是“新闻”怎么办?我应该将其更改为“newses”还是应该使用“new”作为型号名称?
答案 0 :(得分:8)
如果您的模型以字母' s结尾,则表格名称保持不变。在您的情况下,您的模型会默认为您的表news
命名。
如果您想使用其他名称,可以使用:
protected $table = 'tablename';
你的模特内部。
编辑:我在我的申请中对此进行了测试。我制作了一个名为News
的模型。然后我创建了News
的新实例并检索了表名:
$news = new News();
dd($news->getTable());
返回:news
答案 1 :(得分:4)
在您的雄辩模型中,您必须定义table name
。例如,如果我的模型名为user
且数据库中的表名为user_of_application
,那么我这样做
class user extends Model
{
protected $table = 'user_of_application';
}
答案 2 :(得分:3)
您可以通过在模型上定义表属性来指定自定义表,如下所示
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'my_flights';
}
答案 3 :(得分:1)
Laravel使用&#34;标准套装&#34;规则定义:
因此,它假定一个表是一组记录。
当命名与人类语言的各种特征/陷阱冲突时,命名法存在问题。例如,如果我有一个名为Sheep的模型怎么办?这确实意味着我的数据库表应该被称为&#34; Sheeps&#34;?
由开发人员来避免&#34; Gollum / Smeagol&#34;句法。实际上,你不会想要一个名为&#34; Newses&#34;我最终想要一张名为&#34; Sheeps&#34;的桌子。
最终,我用以下内容构建迁移:
sudo php artisan make:migration create_sheep_table --create=sheep
对于模特,你会在文档中注意到他们有一个不同的表名,用于&#34; Flights&#34;叫&#34; my_flights&#34;
https://laravel.com/docs/master/eloquent#defining-models
同样,由开发人员/数据库管理员决定在应用程序上下文中有意义的命名约定。