2017-10-20 162 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命令时,您需要重新启动修补程序以查看更改。

相关问题