What is getPassportsForHouse supposed to represent?
How can I edit fields from another data table?
FullController House
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\House;
use App\Models\Otchet;
use Validate;
class HouseController extends Controller
{
function index()
{
$houses = House::all();
return view('house.list', compact('houses'));
}
public function show($id)
{
$house = House::with(['getOtchetsForHouse','getDogovorsForHouse','getProtocolsForHouse','getPassportsForHouse'])->find($id);
$house->getOtchetsForHouse;
$house->getDogovorsForHouse;
$house->getProtocolsForHouse;
$house->getPassportsForHouse;
return view('house.show', compact('house'));
}
function create(Request $request)
{
return view('house.create');
}
function store(Request $request)
{
$this->validate($request, [
'name'=>'required',
]);
$house = House::query()->create([
'name' => $request->get('name'),
'description' => $request->get('description'),
]);
// foreach($request->getOtchetsForHouse as $index => $otchets) {
// $house->otchets()->create([
// 'file_name' => $otchet['file_name'],
// 'link_file' => $otchet['link_file'],
// ]);
// }
// $house->getOtchetsForHouse()->
// create([
// 'otchet_name' => $request->get('otchet_name'),
// 'otchet_link' => $request->get('otchet_link')
// ]);
// $house->getDogovorsForHouse()->
// create([
// 'dogovor_name' => $request->get('dogovor_name'),
// 'dogovor_link' => $request->get('dogovor_link')
// ]);
// $house->getProtocolsForHouse()->
// create([
// 'protocol_name' => $request->get('protocol_name'),
// 'protocol_link' => $request->get('protocol_link')
// ]);
// $house->getPassportsForHouse()->
// create([
// 'passport_name' => $request->get('passport_name'),
// 'passport_link' => $request->get('passport_link')
// ]);
foreach($request->get('otchet_name') as $key => $otchetName) {
$house->getOtchetsForHouse()
->create([
'otchet_name' => $otchetName,
'otchet_link' => data_get($request->get('otchet_link'), $key),
]);
}
foreach($request->get('dogovor_name') as $key => $dogovorName) {
$house->getDogovorsForHouse()
->create([
'dogovor_name' => $dogovorName,
'dogovor_link' => data_get($request->get('dogovor_link'), $key),
]);
}
foreach($request->get('protocol_name') as $key => $protocolName) {
$house->getProtocolsForHouse()
->create([
'protocol_name' => $protocolName,
'protocol_link' => data_get($request->get('protocol_link'), $key),
]);
}
foreach($request->get('passport_name') as $key => $passportName) {
$house->getPassportsForHouse()
->create([
'passport_name' => $passportName,
'passport_link' => data_get($request->get('passport_link'), $key),
]);
}
dd($request->all());
// return redirect()->route('house.index');
}
function edit(Request $request, $id)
{
$house = House::find($id);
return view('house.edit', compact('house'));
}
function update(Request $request, $id)
{
$house = House::findOrFail($id);
$house->name = $request->get('name');
$house->description = $request->get('description');
$house->save();
foreach ($request->get('passport', []) as $passportId => $passportAttributes) {
$house->getPassportsForHouse()->where('id', $passportId)->update($passportAttributes);
}
foreach ($request->get('otchet', []) as $otchetId => $otchetAttributes) {
$house->getOtchetsForHouse()->where('id', $otchetId)->update($otchetAttributes);
}
foreach ($request->get('dogovor', []) as $dogovorId => $dogovorAttributes) {
$house->getDogovorsForHouse()->where('id', $dogovorId)->update($dogovorAttributes);
}
foreach ($request->get('protocol', []) as $protocolId => $protocolAttributes) {
$house->getProtocolsForHouse()->where('id', $protocolId)->update($protocolAttributes);
}
return redirect()->route('house.index');
}
}
function update(Request $request, $id)
{
$house = House::findOrFail($id);
$house->name = $request->get('name');
$house->description = $request->get('description');
$house->getOtechetForHouse = $request->get('otchet_name');
$house->getOtechetForHouse = $request->get('otechet_link');
$house->save();
return redirect()->route('house.index');
}
view
<div align="center">
<form method="post" action="{{ route('house.update', ['house' => $house->id]) }}">
@csrf
@method('PUT')
<div>
<label for="name">Name</label>
<input type="text" name="name" value="{{ $house->name }}">
</div>
<div>
<label for="">Description</label>
<input type="text" name="description" value="{{ $house->description }}">
</div>
<div>
<label for="">Report</label>
<input type="text" name="otchet_name" value="{{ $house->otchet_name }}">
</div>
<button type="submit">Save</button>
</form>
</div>
Everything works in the controller, all data is displayed according to the ID of the house, but here's the problem with getting data that is outside the house table, I have 4 tables that are connected via hasMany, there are no problems with adding, but there were big problems with editing.
I tried to output through:
$house -> getPassportsForHouse = $request -> get('passport_name'); It just did not show anything, in principle, there is nothing surprising in this.
The table looks like this:
passport table
Schema::create('passports', function (Blueprint $table) {
$table->id();
$table->text('passport_name');
$table->text('passport_link');
$table->unsignedBigInteger('house_id')->index();
$table->foreign('house_id')->references('id')->on('houses');
$table->timestamps();
});
house table
Schema::create('houses', function (Blueprint $table) {
$table->id();
$table->string('name')->nullable();
$table->text('description')->nullable();
$table->timestamps();
});
How to correctly add the code so that I can edit the records belonging to the house in the tables passport, contract, report, protocols
Twice already I have told you that you must echo the relation instance ids:
<input type="text" name="passport[{{ $passport->id }}][passport_name]" value="{{ $passport->passport_name }}">
And so on for each one:
<input type="text" name="passport[{{ $passport->id }}][passport_link]" value="{{ $passport->passport_link }}">
I am not rewriting your template, but hopefully you understand that you should expand this for each relation???
<input type="text" name="dogovor[{{ $dogovor->id }}][dogovor_name]" value="{{ $dogovor->dogovor_name }}">
And so on,
Please or to participate in this conversation.