Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет!
Возникла такая ситуация что 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)
Не в сети
Сижу разбираюсь с проблемой, но решить не могу.
Пробовал следующее:
1. Сделал полный откат до всех изменений которые вносил сегодня. Далее создал модели, миграции, контроллер шаблоны просто скопировал заново. Ошибка сохраняется
2. Добавил одну категорию в базу и сделал методы index, edit, update,
Результат:
index - вывел категорию
edit - подтянул данные и расставил в инпуты
update - не сохраняет данные, снова эта ошибка
3. В методах store, update закомментировал строки сохранения данных
Результат:
store - все равно продолжает отображать ошибку
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>
<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)
Не в сети
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.
Не в сети
Страницы 1