我对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';