我最近在一些情况下将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
方法?这不正常,对吗?
正如我之前所说,其他一切都很完美,除了与用户模型有关的事情。
答案 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