Я создаю адресную книгу в php, используя laravel. У меня есть две таблицы, контакт и адрес. Они связаны в формате oneToMany с каждым адресом, имеющим столбец contact_id
Я пытаюсь создать адрес с помощью основного идентификатора контакта, но не могу получить основной идентификатор контакта для передачи в форму для использовать при создании.
Я пробовал так много вещей из разных постов, но ничего не получается ...
// Blade Routes
Route::get('/search', 'ContactController@search')->name('contacts.search');
Route::get('/createAddress', 'ContactController@createAddress');
// Route::post('/storeAddress/{id}', 'AddressController@store')->name('storeAddress');
// Route::get('/show', 'ContactController@show')->name('contacts.show');
Route::get('/edit', 'ContactController@edit')->name('contacts.edit');
// get id for address function
// Route::get('createAddress/{id}', ['as'=>'id','uses'=>'AddressController@store'])->name('contacts.createAddress');
// Route::get('/map', 'ContactController@map')->name('map');
// MySQL data routes
Route::resource('contacts', 'ContactController');
Route::resource('addresses', 'AddressController');
вызов формы из createAddress
{{ Form::model($contact, ['route'=>['addresses.store', $contact->id], 'method'=>'POST']) }}
@csrf
@include('contacts.form_address')
{{ form::close() }}
Контроллер контактов
public function createAddress (Contact $contact)
{
return view('contacts.createAddress')->with('contact', $contact);
}
Контроллер адресов
public function store(Request $request)
{
dump($request->toArray());
// dd($request->id);
$data = [
'number' => $request->number,
'street' => $request->street,
'city' => $request->city,
'state' => $request->state,
'zip' => $request->zip,
'type' => $request->type,
// 'contact-id'=> $id
];
$request->validate([
'number' =>'integer',
'street' =>'required|string|max:255',
'city' =>'required|string|max:255',
'state' =>'string|max:255',
'zip' =>'integer',
'type' =>'string|max:255',
// 'contact-id'=>'required|integer'
]);
dump($data);
Address::create($request->all());
return redirect()->route('contacts.show')->with('contact', $contact);
}
Это код из index.blade. php из папки контактов.
@foreach ($contacts as $key => $value)
<tr>
{{-- Need to add in sort functions for each catagory --}}
<td>{{$value->firstName}}</td>
<td>{{$value->lastName}}</td>
<td>{{$value->email}}</td>
<td>{{$value->phone}}</td>
<td>{{$value->birthday}}</td>
<td>
<form action="{{ route('contacts.destroy', $value->id) }}" method="post">
<a class="btn btn-sm btn-success" href="{{ route('contacts.show', $value->id)}}">Show</a>
<a class="btn btn-sm btn-warning" href="{{ route('contacts.edit', $value->id)}}">Edit</a>
<a class="btn btn-sm btn-second" href="{{ route('contacts.createAddress', $value->id)}}">Add Address</a>
{{-- @crsf --}}
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger">Delete</button>
</form>
</td>
</tr>
@endforeach
Спасибо за помощь, вот как я решил проблему. Это была комбинация ответов, которые я получил.
Ответ:
Маршруты
Route::post('/storeAddress/{contact_id}', 'AddressController@store')->name('addresses.store');
Route::get('/search', 'ContactController@search')->name('contacts.search');
Контроллер контактов
public function createAddress (Request $request)
{
// dump($request->toArray());
// dump($request->contact_id);
$contact_id = $request->contact_id;
return view('contacts.createAddress')->with('contact_id', $contact_id);
}
Адрес контроллера
public function store(Request $request)
{
$request->validate([
'number' =>'integer',
'street' =>'required|string|max:255',
'city' =>'required|string|max:255',
'state' =>'string|max:255',
'zip' =>'integer',
'type' =>'string|max:255',
'contact_id'=>'required|integer'
]);
Address::create($request->all());
$contact = Contact::find($request->contact_id);
return view('contacts.details',compact('contact'));
}
А на index.blade. php в папке контактов я изменил вызов для createAddress на
<a class="btn btn-sm btn-second" href="{{ route('contacts.createAddress', ['contact_id' => $value->id])}}">Add Address</a>