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

PHP warning: include(C:\xampp\htdocs\hse\vendor\composer/../../app/Buildings.php): failed to open stream

我以前在 App* 中手动删除了一些模型文件,并通过删除 "s" 符号创建了其他文件,因为 laravel 默认情况下可以从那里识别模型名称,以及模型Laravel standadrd 必须写成正文,不能是复数。

在删除我创建的模型之前使用 php artisan make:model 建筑-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');
    }
}

在phpartisan时我运行执行以下命令,获取用户分配的建筑物:

>>> 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

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

应该是

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

App\Building::all()

同时将方法 UserAssignedBuilding 更改为 buildings

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

composer dump-autoload

然后在 tinker 中再次尝试,显示相同的错误,就像 composer dump 命令不起作用,但是当我关闭当前的 tinker 并打开新的(php artisan tinker)时,每件事现在完美运行了。

所以,简单的解决方案是当您 运行 dumpautoload 命令时,您需要重新启动 tinker 才能看到更改。

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

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

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