Возникли некоторые проблемы с пониманием того, как прикрепить мой внешний ключ к моей дочерней записи, когда я вставляю его в свою базу данных. У меня есть класс казино, который может иметь много разных мест в казино (туалет, ресторан, услуги парковщика и т. Д.). Я пытаюсь создать новую запись в своей базе данных местоположения и включить внешний ключ (casino_Id), который является идентификатором таблицы казино. Я не уверен, как я смогу получить этот идентификатор, если я не передам его прямо из сообщения по маршруту, который я делаю в моем файле show.blade.php в моих представлениях казино.
<a href="/casino/{{ $casino->id }}/location/create"><button class="btn btn-primary">Add Location</button></a>
Не совсем уверен, является ли это практичным / безопасным способом передачи этой информации или как получить ее из моей функции создания. В настоящее время у меня есть первая запись о казино, которую он может найти в базе данных, чтобы увидеть, как она вставляет ее, которую он вставляет в базу данных, но не включает внешний ключ при вставке.
Web.php
//Location Routes
Route::get('/casino/{casino}/location/create', 'LocationController@create');
Route::post('/location', 'LocationController@store');
Route::get('/location/{location}', 'LocationController@show');
Route::get('/location/{location}/edit', 'LocationController@edit');
Route::patch('/location/{location}', 'LocationController@update');
Casino.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Casino extends Model
{
public function locations() {
return $this->hasMany(Location::class)->orderBy('title', 'ASC');
}
}
Location.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Location extends Model
{
protected $guarded = [];
protected $fillable = ['title'];
public function casino() {
return $this->belongsTo(Casino::class);
}
public function duties() {
return $this->hasMany(Duty::class)->orderBy('title', 'ASC');
}
}
Создавать и хранить функции в моем LocationController.php
public function create() {
return view('locations.create');
}
public function store(Request $request) {
$casino = Casino::find(1);
$request->validate([
'title' => 'required',
]);
$casino->location = new location([
'title' => $request->get('title'),
]);
$casino->location->save();
return redirect("/casino/1");
}
1 ответ
Вы можете изменить свой маршрут с
Route::get('/casino/{casino}/location/create', 'LocationController@create');
Route::post('/location', 'LocationController@store');
К
Route::get('/casinos/{casino}/locations/create', 'LocationController@create');
Route::post('casinos/{casino}/location', 'LocationController@store');
Ваше действие создания
public function create(Casino $casino)
{
return view('locations.create', compact('casino'));
}
Действия вашего магазина
public store(Request $request, Casino $casino)
{
$request->validate(['title' => 'required']);
$casino->location()->create($request->validated());
return redirect("/casino/{$casino->id}");
}
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.