#laravel #laravel-artisan #laravel-migrations #tinker
#laravel #laravel-artisan #laravel-миграции #повозиться
Вопрос:
У меня проблема с php artisan tinker, не могу найти причину, по которой ему нужна таблица «бизнес», но не таблица «бизнес». Помогите мне исправить ошибки, я чувствую, что я сделал их много) Моя проблема :
IlluminateDatabaseQueryException with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'homestead.businesses' doesn't exist (SQL: select * from `businesses`)'
моя база данных business_table.php
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class BusinessTable extends Migration
{
/**
* Выполнение миграций.
*
* @return void
*/
public function up()
{
Schema::create('business', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('mail');
$table->string('web-site');
$table->timestamps();
});
}
/**
* Отмена миграций.
*
* @return void
*/
public function down()
{
Schema::drop('business');
}
}
Мой контроллер: BusinessController.php
<?php
namespace AppHttpControllers;
use AppModelsBusiness;
use IlluminateHttpRequest;
class BusinessController extends Controller
{
public function index()
{
$business = AppModelsBusiness::all();
return view('business.index', compact('business'));
}
public function store()
{
$business = new Business();
$business->title = request()->input('title');
$business->description = request()->input('description');
$business->save();
return redirect('/business');
}
}
Моя модель: Business.php
<?php
namespace AppHttpControllers;
use AppModelsBusiness;
use IlluminateHttpRequest;
class BusinessController extends Controller
{
public function index()
{
$business = AppModelsBusiness::all();
return view('business.index', compact('business'));
}
public function store()
{
$business = new Business();
$business->title = request()->input('title');
$business->description = request()->input('description');
$business->save();
return redirect('/business');
}
}
Мой файл представления: business.blade.php
@extends('layouts.layout')
@section('title')Бізнес@endsection
@section ('main_content')
<h1>Бизнес</h1>
<p>
<li>{{ $business->title}}</li>>
</p>
@endsection
Изображение моей ошибки:
моя ошибка
Комментарии:
1. вы вставили код контроллера вместо модели
Ответ №1:
Вы можете исправить это, добавив имя таблицы в модель.
В Business.php
модели:
По умолчанию Laravel пытается получить множественное имя модели. Так Business
и будет businesss
.
Проверено внутри Laravel:
Str::plural('business') == "businesses"
class Business extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'business';
}
ссылка на ссылку https://laravel.com/docs/8.x/eloquent#table-names
Рекомендации по созданию миграции и модели
php artisan modelName -m
—-> убедитесь, что имямодели в единственном числе
Таким образом, Laravel автоматически создает множественную версию миграции для вас.
public function index()
{
$business = AppModelsBusiness::all();
return view('business', compact('business'));
}
Здесь вы возвращаете коллекцию business
. Это означает несколько строк таблицы.
Таким образом, вы не можете использовать $business->name
, потому business
что имеет несколько строк.
@extends('layouts.layout')
@section('title')Бізнес@endsection
@section ('main_content')
<h1>Бизнес</h1>
<p>
@foreach ($business as $singleBusiness)
<li>{{ $singleBusiness->title}}</li>>
@endforeach
</p>
@endsection
Комментарии:
1. Спасибо, не могли бы вы все-таки сказать мне, как правильно отобразить базу данных в файле business.blade.php потому что у меня там ошибка
2. @Mineral посмотрите, я их тоже добавил
3. вам нужно это исправить
view('business', compact('business'));
4. Извините, но я не понимаю, что не так
5. это проблема вашего контроллера
Ответ №2:
Laravel ожидает, что имя таблицы базы данных будет множественной версией модели.
В этом случае ваша business
модель становится таблицей businesses
.
Посмотрите здесь для получения дополнительной информации.
https://laravel.com/docs/8.x/eloquent#table-names
У вас есть два варианта решения этой проблемы.
Укажите имя таблицы, которое вы хотите использовать в своей бизнес-модели.
class Business extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'business';
}
Или измените миграцию, чтобы следовать методам Laravel и создать таблицу business.
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class BusinessTable extends Migration
{
/**
* Выполнение миграций.
*
* @return void
*/
public function up()
{
Schema::create('businesses', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('mail');
$table->string('web-site');
$table->timestamps();
});
}
/**
* Отмена миграций.
*
* @return void
*/
public function down()
{
Schema::drop('business');
}
}
Ответ №3:
Попробуйте указать таблицу внутри вашей модели
protected $table = 'business';