我之前手动删除了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
在您的命令中,您缺少模型命名空间
它应该是
App\User::find(4)->UserAssignedBuilding
和
App\Building::all()
也将方法UserAssignedBuilding
改为buildings
错误显示在Tinker(php artisan tinker),当我转储作曲家自动加载文件
composer dump-autoload
然后再次尝试修补,同样的错误显示像composer dump命令没有做到这一点,但是当我关闭当前的修补程序并打开新的修补程序(php artisan修补匠)时,现在每件事情都完美无缺。
因此,简单的解决方案是当您运行dumpautoload命令时,需要重新启动修补程序以查看更改。
我遇到了同样的问题,但在我的情况下,问题是作曲家自动加载的区分大小写。
我使用user
创建了composer artisan make
类(小'u')。所以它为我创建了user.php
文件。之后,我决定更喜欢User
(首都'U'),所以我更改了类名,但没有包含PHP文件。
所以问题是作曲家正在寻找User.php
文件而不是user.php
。将包含文件更改为User.php
为我完成了这项工作。