问题"SQLSTATE[42S02]:找不到基表或视图



我对php手工修补程序有问题,找不到他想要"businesses"表而不想要"business"表的原因。帮我纠正错误,我觉得我犯了很多错误(我的问题:

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

想象我的错误:我的错误

您可以通过在模型中添加表名来解决此问题。

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

ref链接https://laravel.com/docs/8.x/eloquent#table-名称

创建迁移和模型的最佳实践

php artisan modelName -m->确保modelName是单数

通过这种方式,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

Laravel期望数据库表名是模型的复数版本。

在这种情况下,您的business模型将成为businesses的一个表。

查看此处了解更多信息。

https://laravel.com/docs/8.x/eloquent#table-名称


您有两种选择来解决此问题。

指定要在业务模型中使用的表名称。

class Business extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'business';
}

或者改变你的迁移,遵循Laravel的做法,创建一个业务表。

<?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');
}
}

尝试在模型中指定表

protected $table = 'business';

相关内容

最新更新