PHP警告:include(C:\ xampp \ htdocs \ hse \ vendor \ composer /../../ app / Buildings.php):无法打开流

问题描述 投票:2回答:3

我之前手动删除了App *中的一些模型文件,只是删除了“s”符号就创建了其他文件,因为默认情况下laravel可以识别那里的模型,Laravel标准的模型必须写成普通而不是复数。

在删除我使用php artisan make创建的模型之前:模型建筑物-m

我删除(建筑物)模型后创建的新模型是php artisan make:model建筑通知我刚创建了一个没有'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 artisan中,当我运行以下命令时,获取用户指定的建筑物:

>>> 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
php mysql laravel eloquent laravel-eloquent
3个回答
2
投票

在您的命令中,您缺少模型命名空间

它应该是

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

App\Building::all()

也将方法UserAssignedBuilding改为buildings


4
投票

错误显示在Tinker(php artisan tinker),当我转储作曲家自动加载文件

composer dump-autoload

然后再次尝试修补,同样的错误显示像composer dump命令没有做到这一点,但是当我关闭当前的修补程序并打开新的修补程序(php artisan修补匠)时,现在每件事情都完美无缺。

因此,简单的解决方案是当您运行dumpautoload命令时,需要重新启动修补程序以查看更改。


0
投票

我遇到了同样的问题,但在我的情况下,问题是作曲家自动加载的区分大小写。

我使用user创建了composer artisan make类(小'u')。所以它为我创建了user.php文件。之后,我决定更喜欢User(首都'U'),所以我更改了类名,但没有包含PHP文件。

所以问题是作曲家正在寻找User.php文件而不是user.php。将包含文件更改为User.php为我完成了这项工作。

© www.soinside.com 2019 - 2024. All rights reserved.