php - How to create using relationship in Eloquent model? ← (PHP)
one text
I have two tables having a relationship:
Package Table:
slug
Package_Banner_Image
Package_Type
Package_Name
Package_Price
Package_Duration
Package_Level
Package_Short_Description
Package_Description
Featured
Package_Location
Programs Table
id
package_id
day
title
description
So in my admin panel when I try to create using the relation it only adds to package_id = 1 no matter from which package you create.
My Package Model
class Package extends Model
{
protected $guarded = [];
public function program() {
return $this->hasOne(Program::class);
}
}
My Program Model
class Program extends Model
{
protected $guarded = [];
public function package() {
return $this->belongsTo(Package::class);
}
}
Now this is the code from my PackageProgramController
page for create and store:
public function create($packageSlug) {
$package = Package::firstorFail();
return view('admin.create.createPackageProgram',compact('package'));
}
public function store(Request $request,$packageSlug)
{
$packages = Package::firstOrFail();
$data = request()->validate([
'day' => 'required',
'title' => 'required',
'description' => 'required',
]);
$packages->program()->create($data);
switch ($request->input('action')) {
case 'preview':
return redirect()->intended(route('PackageProgram',$packageSlug))->with('message', 'Package Program has been added.');
break;
default:
return redirect()->back()->with('message', 'Package Program has been added.');
break;
}
}
Now finally my route looks something like this:
Route::prefix('package-programs')->group(function() {
Route::get('/', 'AdminVisible\PackageController@index')->name('PackagePrograms');
Route::prefix('{packageSlug}')->group(function() {
Route::get('/', 'AdminVisible\PackageProgramController@index')->name('PackageProgram');
Route::get('/create', 'AdminVisible\PackageProgramController@create')->name('PackageProgram.create');
Route::post('/create', 'AdminVisible\PackageProgramController@store')->name('PackageProgram.store');
});
});