【问题标题】:"User" model broken after Laravel 4.1 upgradeLaravel 4.1 升级后“用户”模型损坏
【发布时间】:2014-02-09 13:25:58
【问题描述】:

我最近在一些情况下将 Laravel 从 4.0 升级到了 4.1。今天我在另一个实例中进行了升级,发现 User 模型有问题。 models/User.php 文件仍然存在,但我认为 Laravel 不再使用它了。我的问题是:为什么?

为了演示这个问题,我在 routes.php 中创建了以下条目:

Route::get('test1', function()
{
  $course = Course::find(4);
  return ($course->users()->first());
});

Route::get('test2', function()
{
  $user = User::find(22);
  return ($user->courses()->first());
});

这两个条目在语法和数据库对象方面都是正确的(存在 ID 为 4 的课程,存在 ID 为 22 的用户)。我的 Course.php 模型具有以下内容:

public function users()
{
  return $this->belongsToMany('User')->withPivot('participant_role')->withTimestamps();
}

而我的User.php也有对应的入口:

public function courses()
{
  return $this->belongsToMany('Course')->withPivot('participant_role')->withTimestamps();
}

现在,如果我启动第一个 URL /test1,我会得到一个有效的 JSON 条目。正如预期的那样。

使用第二个 URL,/test2 但是我收到一条错误消息:

BadMethodCallException

Call to undefined method Illuminate\Database\Query\Builder::courses()

open: /home/simoa/laravelapps/clientname/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php `

我认为这里有问题。为什么我的 Laravel 实例试图从 Illuminate\Database\Query\Builder 类调用 courses() 方法?这不正常,对吧?

正如我之前所说,除了与用户模型有关的事情之外,其他一切都完美无缺。

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    问题是由文件 vendor/composer/autoload_classmap.php 中的无效条目引起的。

    由于某些原因,在 4.1 升级期间(可能运行命令:composer update'User' => $baseDir . '/app/models/User.php' 的条目在该文件中变成了'User' => $baseDir . '/app/models/old_User.php'

    我的模型目录中确实有一个名为 old_User.php 的旧备份/开发文件,出于某种原因,composer 似乎已将用户类映射到该文件。

    解决方法:删除 old_User.php 并重新运行 composer update。

    【讨论】:

      【解决方案2】:

      尝试运行php artisan clear-compiled,然后运行php artisan optimize

      【讨论】:

      • 感谢您的努力,但您的建议对我没有帮助。
      • 试试return $user->courses()->getResults()->first();? $user->courses() 返回一个 BelongsToMany
      • 这仍然没有帮助。我认为语法是正确的,因为$course->users()->first(); 实际上有效,同时它也使用belongsToMany 关系。由于某种原因,未找到用户模型中的方法...
      • 现在我发现问题是由文件vendor/composer/autoload_classmap.php 中的条目引起的。由于某种原因,在 4.1 升级期间(我猜是作曲家更新)条目 'User' => $baseDir . '/app/models/User.php' 已变成 'User' => $baseDir . '/app/models/old_User.php'。我不知道为什么会这样。我的模型目录中确实有那个文件old_User.php
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 2014-12-14
      • 2016-09-14
      • 2018-08-13
      • 2016-01-20
      相关资源
      最近更新 更多