Проблема ‘SQLSTATE [42S02]: базовая таблица или представление не найдены

#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';