在 Laravel 中创建模型时使用受保护的 $table 变量
Posted
技术标签:
【中文标题】在 Laravel 中创建模型时使用受保护的 $table 变量【英文标题】:Using protected $table variable when creating a Model in Laravel 【发布时间】:2018-09-09 14:53:15 【问题描述】:目前,我正在学习 Laravel 中的 Eloquent ORM,一开始,在阅读有关使用迁移表创建模型时,书中说您可以通过定义 $protected 表来更改表的名称。用所需的名称定义这个变量很容易,但很明显它不会影响 mysql 中的表。如何使用 Model 类的这个属性?
【问题讨论】:
在模型类中添加protected $table = 'the_real_table_name_in_db';
我这样做了,但没有任何改变,这就是我问这个问题的原因。
你需要告诉模型,这个模型用的是哪个表,并不是说改变了$table也会改变db中的表名,你需要改变表的schema
因此,如果它使用预期的“snake_case”表示法创建表,我无法创建带有 --migration 标志的模型。我先用 $table 创建了一个模型,然后迁移了与 $table 相同的表名。现在它起作用了。谢谢。
【参考方案1】:
您将使用您在迁移中喜欢的名称创建表,然后您将使用:
protected $table = "mytablename";
让 Laravel 在调用 Model::create() 或任何其他方法时知道它应该使用哪个表。
【讨论】:
我先用$table创建了一个模型,然后迁移到与$table同名的表。现在它起作用了。谢谢。 很高兴它有帮助!【参考方案2】:假设您的表格是帖子。在这种情况下,如果您创建模型 Post,laravel 会自动猜测该表是帖子。但是如果你的表名是 post,并且你将模型命名为 Post,laravel 仍然假定该表是 posts。在这种情况下你必须使用这个
protected $table = "post";
希望这可以清除您的概念。
【讨论】:
我创建了一个带有迁移标志的模型帖子,所以当我迁移表时,它在数据库中创建了一个名为“posts”的表。但是,我想重命名它,即使我写了 protected $table = "post";例如,数据库中没有任何变化。这就是为什么我认为我误解了这个变量的功能。 其实如果你创建一个模型,它不会创建表。该表是根据您的迁移文件创建的,您在那里指定的表的名称是什么。模型只会根据规则“表名是小写复数,模型名是单数,首字母大写”来计算名称。 如果这是正确答案,请不要忘记将其标记为正确答案,这样可以帮助其他有相同问题的人以上是关于在 Laravel 中创建模型时使用受保护的 $table 变量的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 Laravel 尝试将其保存到数据库的情况下在 Eloquent 模型中使用受保护的属性
在不允许 getEnv 调用的受保护环境中创建 AmazonHttpClient