I've been searching the web for quite a long time and I have tried adding the protected $table = "brands";
to my Brand Model as seen here:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Brand extends Model
{
protected $table = "brands";
use HasFactory;
protected $fillable = [
'brand_name',
'brand_image'
];
}
Then on my controller I have the following code:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Brand;
use Illuminate\Support\Carbon;
class BrandController extends Controller
{
public function AllBrand(){
$brands = Brand::latest()->paginate(2);
return view('admin.brand.index', compact('brands'));
}
public function StoreBrand(Request $request){
$validatedData = $request->validate([
'brand_name' => 'required|unique:brand|min:4',
'brand_image' => 'required|mimes:jpg,jpeg,png',
],
[
'brand_name.required' => 'Please input brand name',
'brand_image.min' => 'Brand longer than 4 Characters'
]);
$brand_image = $request->file('brand_image');
$name_gen = hexdec(uniqid());
$img_ext = strtolower($brand_image->getClientOriginalExtension());
$img_name = $name_gen.'.'.$img_ext;
$upload_location = 'images/brand/';
$publish_image = $upload_location.$img_name;
$brand_image->move($upload_location,$img_name);
Brand::insert([
'brand_name' => $request->brand_name,
'brand_image' => $publish_image,
'created_at' => Carbon::now()
]);
return Redirect()->back()->with('success', 'Brand added successfully!');
}
}
Passing this through my routes:
// For Brand Route
Route::get('/brand/all', [BrandController::class, 'AllBrand'])->name('all.brand');
Route::post('/brand/add', [BrandController::class, 'StoreBrand'])->name('store.brand');
Which I also used on my form inside views/admin/brand folder
:
<form action="{{ route('store.brand') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="text" name="brand_name" placeholder="Brand name"/>
@error('brand_name')
<span style="color: red; font-weight: bold;"> {{ $message }}</span>
@enderror
My database table is named brands
but adding protected $table = "brands";
did not solve this. I even tried to re-migrate and do this all over again but nothing seems to work at all.
Are there anymore ways to solve this issue? I keep on getting the SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel8.brand' doesn't exist (SQL: select count(*) as aggregate from
brand where
brand_name = Bx LLC)
error whenever I am adding a new brand.
Please help!
the problem is not in storing Brand, but in validation:
in your validation:
'brand_name' => 'required|unique:brand|min:4',
this told Laravel to make sure of brand name uniqueness in 'brand' table, so when the query committed, you see that error.
this validation should be:
'brand_name' => 'required|unique:brands|min:4',
Instead of specifying the table name directly, you may specify the Eloquent model which should be used to determine the table name:
'brand_name' => 'required|unique:App\Models\Brand|min:4',
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.