Laravel 4.1升级后“用户”模型中断

时间:2014-02-09 13:25:58

标签: php laravel laravel-4

我最近在一些情况下将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();
}

现在,如果我启动第一个网址/test1,我会得到一个有效的JSON条目。正如所料。

使用第二个网址/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实例试图从courses()类调用Illuminate\Database\Query\Builder方法?这不正常,对吗?

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

2 个答案:

答案 0 :(得分:2)

问题是由文件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的旧备份/ dev文件,出于某种原因,似乎,composer已将User类映射到该文件。

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

答案 1 :(得分:1)

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