2017-10-20 159 views
0

我以前手動刪除App *並創建其他的只是刪除「s」符號,因爲默認情況下,laravel可以識別那裏的模型名稱,Laravel standadrd的模型必須寫成正常的而不是複數形式。PHP警告:包括(C: xampp htdocs hse vendor composer /../../ app/Buildings.php):無法打開流

使用 PHP工匠化妝刪除我創建它們的模型之前:模型建築-m

新的模式,我創建之後我刪除了(建築)模型是 PHP工匠製作:建立模型 注意我剛剛創建了一個新的模型,而「S」

現在在我的用戶模型我創建方法:

public function UserAssignedBuilding(){ 
     return $this->hasManyThrough('App\Building','App\Area','user_id','area_id'); 
    } 

Building.php模型文件

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Building extends Model 
{ 
    protected $table = 'buildings'; 

    public function areas(){ 
     $this->belongsTo('App\Area'); 
    } 

} 

Area.php型號文件:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Area extends Model 
{ 
    protected $fillable = [ 
     'name' 
    ]; 

    public function users(){ 
     return $this->belongsToMany('App\User','area_user','area_id','user_id'); 
    } 

    public function buildings(){ 
     return $this->hasMany('App\Building'); 
    } 
} 

在PHP的工匠當我運行下面的命令,來獲取用戶指定的建築:

>>> User::find(4)->UserAssignedBuilding 
PHP warning: include(C:\xampp\htdocs\hse\vendor\composer/../../app/Buildings.php): failed to open stream: No such file or directory in C:\xampp\htdocs\hse\vendor\composer\ClassLoader.php on line 444 

看來,錯誤的是該框架試圖加載(Buildings.php)模型文件,我已經刪除它並創建(Building.php)。

我運行以下命令:

C:\xampp\htdocs\hse>composer dumpautoload 
Generating optimized autoload files 
> Illuminate\Foundation\ComposerScripts::postAutoloadDump 
> @php artisan package:discover 
Discovered Package: fideloper/proxy 
Discovered Package: laravel/tinker 
Package manifest generated successfully. 

但發行不固定

還試圖讓建築物行,其他錯誤顯示: -

>>> Building::all() 
PHP Fatal error: Class 'Building' not found in eval()'d code on line 1 

回答

1

在你命令你缺少模型命名空間

它應該是

App\User::find(4)->UserAssignedBuilding 

而且

App\Building::all() 

另外改變方法UserAssignedBuildingbuildings

+0

>>>應用\用戶::發現(4) - > UserAssignedBuilding PHP警告:包括(C:\ XAMPP \ htdocs中\ HSE \廠商\作曲家/../../應用程序/建築物。C:\ xampp \ htdocs \ hse \ vendor \ composer \ ClassLoader.php上沒有這樣的文件或目錄在線444 >>> 而第二個命令:App \ Building :: all )成功檢索到所有建築物表格記錄。但爲什麼當我使用相同的命令而沒有爲(User :: all()和其他一些表格)指定模型命名空間時,我正在成功獲取記錄 – user2873860

+0

嘗試將'UserAssignedBuilding'重命名爲'buildings'並像這樣使用'App \ User :: find(4) - > buildings' – ljubadr

+0

這工作,我發佈這個問題後,我已經改變了方法名稱UserBuildings(),所以當我提到我以前的評論,該命令仍然給出同樣的錯誤,我鍵入的老方法名 應用程序\用戶::發現(4) - > UserAssignedBuilding 但我的問題是:爲什麼有些機型可以在鼓搗被稱爲無需鍵入有命名空間 – user2873860

0

的誤差示出在廷克(PHP人員鼓搗) 當我傾倒作曲家自動加載文件

composer dump-autoload 

然後在修補程序中再次嘗試,同樣的錯誤顯示作曲家轉儲命令沒有這樣做,但是當我關閉當前修補程序並打開一個新的(php工匠修補程序),現在每件事情都完美地工作。

因此,簡單的解決方案是當您運行dumpautoload命令時,您需要重新啓動修補程序以查看更改。

相關問題