【问题标题】:Laravel model's custom method BadMethodCallException - tries to use workbench folder's vendor files?Laravel 模型的自定义方法 BadMethodCallException - 尝试使用工作台文件夹的供应商文件?
【发布时间】:2015-02-03 14:18:50
【问题描述】:

我经常在模型文件中添加自定义方法时遇到一个奇怪的错误。从路由文件中,我查询了模型,但得到了“找不到方法”——从错误日志中可以看出,Laravel 正在使用工作台文件夹下的供应商文件,即使该工作台包与此代码没有任何关系。

Route::get('/test', function () {
    $obj = MyModel::where('id', 1111)->get()->first();
    return $obj->toCustomFormat();
});


[2015-02-03 16:08:08] development.ERROR: exception 'BadMethodCallException' with message 'Call to undefined method Illuminate\Database\Query\Builder::toCustomFormat()' in /var/www/project/workbench/envision/mypackage/vendor/illuminate/database/Illuminate/Database/Query/Builder.php:2117
Stack trace:
#0 [internal function]: Illuminate\Database\Query\Builder->__call('toCustomForm...', Array)
#1 [internal function]: Illuminate\Database\Query\Builder->toCustomFormat()
#2 /var/www/project/workbench/envision/mypackage/vendor/illuminate/database/Illuminate/Database/Eloquent/Builder.php(913): call_user_func_array(Array, Array)
#3 [internal function]: Illuminate\Database\Eloquent\Builder->__call('toCustomForm...', Array)
#4 [internal function]: Illuminate\Database\Eloquent\Builder->toCustomFormat()
#5 /var/www/project/bootstrap/compiled.php(7459): call_user_func_array(Array, Array)
#6 /var/www/project/app/routes.php(12): Illuminate\Database\Eloquent\Model->__call('toCustomForm...', Array)
#7 /var/www/project/app/routes.php(12): MyModel->toCustomFormat()
#8 [internal function]: {closure}()

项目根目录下的工匠转储没有帮助。你是怎么做到的?

更新:

模型的自定义方法是这样的:

public function toCustomFormat() {
    $this->to       = date(DateTime::ISO8601, strtotime($this->to));
    $this->from     = date(DateTime::ISO8601, strtotime($this->from));
    return $this->toArray();
}

【问题讨论】:

  • 你能告诉我们MyModel类吗?
  • 我现在已按照@lukasgeiter 的要求更新了问题 - 路线的代码示例中有错字(我已简化模型及其方法名称)。
  • 您是否有多个 MyModel 类,所以您可能正在处理错误的类(没有此方法)?
  • 哦,该死的,似乎 FTP 没有默默地保存更新,或者我打开了两次相同的文件。以前我看到它正在工作,所以在日志记录中查看工作台文件夹下的文件会产生误导......那是因为它试图升级在工作台下搜索方法吗?
  • 我真的不知道...所以它现在可以工作了吗?

标签: php laravel laravel-4 eloquent


【解决方案1】:

问题在于通过 FTP 保存文件时混淆了。所以该方法不在模型文件中。

然而,看到 Laravel 试图在工作台文件夹中的一个包下找到该方法是一种误导,该文件夹有另一个供应商文件夹。也许 Laravel 尝试升级搜索该位置下的缺失方法,但在模型文件夹中找不到它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-01
    • 2020-05-04
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    相关资源
    最近更新 更多