Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.06.2023 17:26:09

Обращение к не существующей таблице

Всем привет!
Возникла такая ситуация что laravel обращается к несуществующей таблице.
Я создал модель с миграцией BookingCategory
Далее создал ресурсный контроллер и указал роут

Route::resource('/booking/category', App\Http\Controllers\Admin\BookingCategoryController::class);

в модели задал разрешенные поля для редактирования и настроил связку таблиц

protected $fillable = [
        'title',
        'link',
        'published',
    ];

    public function booking()
    {
        return $this->belongsTo(Booking::class);
    }

в контроллере в методе store делаю запись в таблицу

BookingCategory::create($request->all());

return redirect()->route('admin.category.index');

В результате идет попытка сделать запись в таблицу category_bookins

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'category_bookins' doesn't exist

здесь следует пояснить почему таблицу показывает "category_bookins" хотя я создавал "booking_categories" и в базе именно эта таблица.
Дело в том что когда я столкнулся с данной ошибкой стал искать проблему и увидел что не совсем логично назвал модель и решил сделать откат миграций и создал модель заново + миграцию, контроллер заново создавать не стал и просто переименовал файл и подключил новую модель.

Но если смотреть на ошибку с прошлой моделью CategoryBooking, то сама ошибка точно такая же, можно заметить что при попытке сохранить данные из имени таблицы почему то удаляется буква "g"

Мое удивление стало еще больше когда я переименовал таблицу а ларавел делает обращение все равно к старой которой никогда и не было.

Подскажите пожалуйста в чем проблема?

Изменено kull88 (22.06.2023 17:28:44)

Не в сети

#2 22.06.2023 21:46:35

Re: Обращение к не существующей таблице

Сижу разбираюсь с проблемой, но решить не могу.

Пробовал следующее:
1. Сделал полный откат до всех изменений которые вносил сегодня. Далее создал модели, миграции, контроллер шаблоны просто скопировал заново. Ошибка сохраняется sad

2. Добавил одну категорию в базу и сделал методы index, edit, update,
Результат:
index - вывел категорию
edit - подтянул данные и расставил в инпуты
update - не сохраняет данные, снова эта ошибка sad

3. В методах store, update закомментировал строки сохранения данных
Результат:
store - все равно продолжает отображать ошибку yikes
update - редиректит на метод index

ниже приведу код всего этого безобразия

миграция

public function up()
    {
        Schema::create('booking_categories', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('link');
            $table->integer('published')->default(0);
            $table->timestamps();
        });
    }

Модель BookingCategory

class BookingCategory extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'link',
        'published',
    ];

    public function booking()
    {
        return $this->belongsTo(Booking::class);
    }
}

контроллер

class BookingCategoryController extends Controller
{
    public function index()
    {
//        $categories = BookingCategory::all();

//        dd($categories);

        return view('admin.booking.category.index', [
            'categories' => BookingCategory::all(),
        ]);
    }

    public function create()
    {
        return view('admin.booking.category.create', []);
    }

    public function store(FormCategoryCreateRequest $request)
    {
//        BookingCategory::create($request->all());

        return redirect()->route('admin.category.index');
    }

    public function show($id)
    {
        //
    }

    public function edit($id)
    {
        $category = BookingCategory::findOrFail($id);

        return view('admin.booking.category.create', [
            'category' => $category,
        ]);
    }

    public function update(FormCategoryCreateRequest $request, $id)
    {
//        $category = BookingCategory::findOrFail($id);
//        $category->update();

        return redirect(route('category.index'));
    }

    public function destroy($id)
    {
        //
    }
}

Форма отвечает сразу за оба варианта, создание и изменение

<form method="POST" action="{{ isset($category) ? route('category.update', $category->id) : route('category.store') }}">
                                @csrf
                                @if(isset($category))
                                    @method('PUT')
                                @endif
                                <div class="form-group">
                                    <label for="title">Название категории</label>
                                    <input type="text" name="title" id="title" value="{{ $category->title ?? '' }}" class="form-control @error('title') border-danger @enderror" id="title" placeholder="Название категории">
                                    @error('title')
                                    <p class="text-danger">{{ $message }}</p>
                                    @enderror
                                </div>
                                <div class="form-group">
                                    <label for="link">Символьный код</label>
                                    <input type="text" name="link" id="link" value="{{ $category->link ?? '' }}" class="form-control @error('link') border-danger @enderror" id="title" placeholder="Символьный код">
                                    @error('link')
                                    <p class="text-danger">{{ $message }}</p>
                                    @enderror
                                </div>

                                <div class="form-group">
                                    <input type="hidden" name="activity" value="0" />
                                    <input type="checkbox" name="published" value="1" id="published" data-bootstrap-switch data-off-color="danger" data-on-color="success" @if(isset($category)) {{ old('published', $category->published) !=1?: 'checked' }} @endif>
                                    &nbsp;&nbsp;&nbsp;<label for="published">Опубликовать</label>
                                </div>

                                <div class="card-footer">
                                    <button type="submit" class="btn btn-primary">{{ isset($category) ? "Изменить" : 'Добавить' }}</button>
                                </div>
                            </form>

route

Route::middleware(['role:admin|manager'])->prefix('admin_panel')->group(function () {
    Route::get('/', [App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');

    Route::resource('/news', App\Http\Controllers\Admin\NewsController::class);
    Route::resource('/booking/category', App\Http\Controllers\Admin\BookingCategoryController::class);
});

Изменено kull88 (22.06.2023 21:50:08)

Не в сети

#3 23.06.2023 16:54:46

Re: Обращение к не существующей таблице

Table 'category_bookins' doesn't exist

Eloquent может добавить 's' когда сам додумывает имя таблицы из имени класса-модели. Но чтобы убрать 'g' это фантастика. Где-то ты сам прописал именно так, просто поищи это слово глобально по коду.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела