2014-02-09 36 views
0

最近在幾個實例中,我已經將Laravel從4.0升級到4.1。今天我又在另一個實例中進行了升級,發現用戶模型存在問題。 models/User.php文件仍然存在,但我認爲它不再被Laravel使用。我的問題是:爲什麼?Laravel 4.1升級後出現「用戶」模式

爲了說明這個問題,我在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條目。如預期。

隨着第二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()方法?這是不正常的,對吧?

正如我前面所說,除了與用戶模型有關的事情之外,其他所有工作都很完美。

回答

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並重新運行作曲家更新。

1

嘗試運行php artisan clear-compiled然後php artisan optimize

+0

感謝您的努力,但您的建議並沒有幫助我的情況。 –

+0

嘗試'return $ user-> courses() - > getResults() - > first();'? '$ user-> courses()'返回一個'BelongsToMany'類 – cecilozaur

+0

這仍然沒有幫助。我認爲語法是正確的,因爲'$ course-> users() - > first();'實際上可以工作,同時它也使用'belongsToMany'關係。出於某種原因,找不到用戶模型中的方法... –