Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
У меня был рабочий код, я решил создать новую модель
Comment
и миграцию. Я выполнил 2 команды в командной строке,
php artisan make:model Comment
- создал модель и
php artisan make:migration create_comments_table
- создал новую миграцию, после этого выполнил ещё одну команду -
php artisan migrate:fresh --seed
, чтобы база данных обновилась. Модель
Comment
выглядит следующим образом:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
protected $fillable = [
'description', 'spot_id'
];
public function spot()
{
return $this->belongsTo('App\Spot');
}
}
Миграция выглядит так:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateCommentsTable extends Migration
{
public function up()
{
Schema::create('comments', function (Blueprint $table) {
$table->increments('id');
$table->text('description');
$table->integer('spot_id')->unsigned();
$table->foreign('spot_id')->references('id')->on('spots');
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('comments');
}
}
Также в модель
Spot
, которая у меня уже была, я добавил метод
comments
и теперь модель выглядит так:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Spot extends Model
{
protected $fillable = [
'lat', 'lng', 'description', 'user_id'
];
public function videos()
{
return $this->hasMany('App\Video');
}
public function tricks()
{
return $this->belongsToMany('App\Trick')->withTimestamps();
}
public function images()
{
return $this->hasMany('App\Image')->withTimestamps();
}
public function user()
{
return $this->hasOne('App\User');
}
public function comments()
{
return $this->hasMany('App\Comment');
}
}
После этих действий любая страница где используется модель
Spot
перестала работать, ошибка отлавливается в любом контроллере где используется модель
Spot
, сама ошибка
Class 'App\Spot' not found
.
После отката миграции, удалении метода
comments
из модели
Spot
и удалении модели
Comment
появляется другая ошибка-
include(D:\Install\XAMPP\htdocs\parkour\vendor\composer/../../app/Comment.php): failed to open stream: No such file or directory
Не в сети
Разобрался, помогла команда
composer dump-autoload
. Буду благодарен, если кто-то объяснит мне почему произошла такая ошибка и пришлось использовать эту команду, до этого модели и миграции нормально и без этой команды работали. И что за команда
php artisan clear-compiled
, она заменяет вышеуказанную?
Не в сети
php artisan clear-compiled
Эта команда так-же выполняет composer du (composer dump-autoload).
Покажи composer.json.
В PHP нет из коробки поддержки автоподгрузки класса по его namespace, но тем не менее, классы почему-то автоматически подгружаются. Советую разобраться с spl_autoload_register и psr-4. Без понимания этих мезанизмов не редко возникают проблемы (например, если в классе есть синтаксическая ошибка, то не редко ты увидишь ошибку Class not found, а не ошибку компиляции).
Изменено covobo (22.06.2018 18:14:46)
Не в сети
composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0"
},
"require-dev": {
"barryvdh/laravel-debugbar": "^3.1",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
},
"autoload": {
"classmap": [
"database/seeds",
"database/factories"
],
"psr-4": {
"App\\": "app/"
}
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"extra": {
"laravel": {
"dont-discover": [
]
}
},
"scripts": {
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate"
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
]
},
"config": {
"preferred-install": "dist",
"sort-packages": true,
"optimize-autoloader": true
},
"minimum-stability": "dev",
"prefer-stable": true
}
Не в сети