【问题标题】:Undefined method File::save() (Laravel model)未定义的方法 File::save() (Laravel 模型)
【发布时间】:2013-09-13 02:12:25
【问题描述】:

我正在使用 Laravel 构建一个新的 Web 项目。我正在使用 Eloquent(它的 ORM)来完成所有与数据库相关的工作。我有一个带有两个表的 SQLite 数据库:“图像”和“文件”。因此,我有两个模型:“Image.php”(Image 类扩展 Eloquent)和“File.php”(File 类扩展 Eloquent)。

根据文档,我做得对。我尝试使用 Image 模型并且效果很好。该模型的典型使用示例:

$image = new Image;
$image->val1 = $val1;
$image->val2 = $val2;
$image->save();

但是,出于某种我不知道的原因,文件模型没有按预期工作。我检查了所有内容:表名、类名、文件名、表……对我来说似乎没问题。我尝试做的基本相同:

$file = new File;
$file->val1 = $val1;
$file->val2 = $val2;
$file->save();

当尝试运行它时,我得到:

调用未定义的方法 Illuminate\Support\Facades\File::save()

如果我在保存之前执行 var_dump(),似乎正在加载模型:

object(Illuminate\Support\Facades\File)#133 (4) {
    ["val1"]=> string(8) "abcdef" 
    ["val2"]=> string(10) "ghijkl" 
}

我在这里错过了什么?

【问题讨论】:

  • 确保类 File 不存在于其他地方。
  • 您是否添加了 File 的扩展定义?
  • 当迁移文件类被命名为与模型类相同时,我已经看到了这一点。

标签: php database model laravel eloquent


【解决方案1】:

在这种情况下,File 是一个保留字,因为它是下面外观的别名(在 /app/config/app.php 中定义)

'File' => 'Illuminate\Support\Facades\File',

将模型名称更改为其他名称,您的所有代码都应该可以正常工作。

【讨论】:

  • 我怎么会错过这个...非常感谢(会接受这个答案)。
  • Event 也是如此,我遇到了问题:调用未定义的方法 Illuminate\Support\Facades\Event::save()
【解决方案2】:

如果您使用任何保留关键字作为模型名称,则会出现此问题。 例如:

请求

文件..等

【讨论】:

    【解决方案3】:

    对于搜索类似问题的人,请记住模型类的名称必须是单数。

    class Client extends Eloquent {
    
    protected $table = 'promociones';        
    
    }
    

    然后,在您的控制器中:

    client = new Client;
    

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2015-06-10
      • 2019-05-14
      • 2015-01-04
      • 2023-03-07
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2017-11-24
      相关资源
      最近更新 更多