【问题标题】:Using protected $table variable when creating a Model in Laravel在 Laravel 中创建模型时使用受保护的 $table 变量
【发布时间】: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 相同的表名。现在它起作用了。谢谢。

标签: laravel orm model eloquent


【解决方案1】:

您将使用您在迁移中喜欢的名称创建表,然后您将使用:

protected $table = "mytablename";

让 Laravel 在调用 Model::create() 或任何其他方法时知道它应该使用哪个表。

【讨论】:

  • 我先用$table创建了一个模型,然后迁移到与$table同名的表。现在它起作用了。谢谢。
  • 很高兴它有帮助!
【解决方案2】:

假设您的表格是帖子。在这种情况下,如果您创建模型 Post,laravel 会自动猜测该表是帖子。但是如果你的表名是 post,并且你将模型命名为 Post,laravel 仍然假定该表是 posts。在这种情况下你必须使用这个

protected $table = "post";

希望这可以清除您的概念。

【讨论】:

  • 我创建了一个带有迁移标志的模型帖子,所以当我迁移表时,它在数据库中创建了一个名为“posts”的表。但是,我想重命名它,即使我写了 protected $table = "post";例如,数据库中没有任何变化。这就是为什么我认为我误解了这个变量的功能。
  • 其实如果你创建一个模型,它不会创建表。该表是根据您的迁移文件创建的,您在那里指定的表的名称是什么。模型只会根据规则“表名是小写复数,模型名是单数,首字母大写”来计算名称。
  • 如果这是正确答案,请不要忘记将其标记为正确答案,这样可以帮助其他有相同问题的人
猜你喜欢
  • 1970-01-01
  • 2018-07-16
  • 2020-03-29
  • 2010-09-30
  • 1970-01-01
  • 2017-11-30
  • 2022-11-09
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多