JavaScript
x
public function create()
{
$streets = street::get();
return view('dashboard.house.created');
}
public function store(Request $request)
{
$this->validate($request, [
'home_number' => 'required',
'passport' => 'required',
'option_1' => 'required',
'street_id' => 'required',
'option_2' => 'required',
'option_3' => 'required',
'garage' => 'required',
'apartments' => 'required',
's_full' => 'required',
's_life' => 'required',
's_nlife' => 'required',
'status' => 'required',
'year_create' => 'required',
]);
$homes = Houses::query()->create([
'home_number' => $request->get('home_number'),
'passport' => $request->get('passport'),
'option_1' => $request->get('option_1'),
'option_2' => $request->get('option_2'),
'street_id' => $request->get('street_id'),
'option_3' => $request->get('option_3'),
'garage' => $request->get('garage'),
'apartments' => $request->get('apartments'),
's_full' => $request->get('s_full'),
's_life' => $request->get('s_life'),
's_nlife' => $request->get('s_nlife'),
'status' => $request->get('status'),
'year_create' => $request->get('year_create'),
]
);
if ($request->hasFile('image') && $request->file('image')->isValid()) {
$homes->addMediaFromRequest('image')->toMediaCollection('images');
}
I can’t fill out the card at home when creating. The list of streets appears, but when you select a street, and further fill in all the fields, the page is simply refreshed without entering the data into the database. Where I made a mistake in the code, please tell me!
UPD: Now I can not go to the page in the admin panel with a list of houses, writes
JavaScript
ErrorException
Attempt to read property "name" on null (View: D:laravel-testedproject1resourcesviewsDashboardhousemain.blade.php)
The error is highlighted on this line (this is where you get the street and house number).
JavaScript
<td class="w-2/3 py-5">{{$home->street->name}}, {{$home->home_number}}</td>
created.blade.php
JavaScript
<div>
<label for="street">Street</label>
<select name="street_id" class="w-full">
<option selected>Choose street</option>
@foreach($streets as $street)
<option value="{{$street->id}}">{{$street->name}}</option>
@endforeach
</select>
</div>
Advertisement
Answer
You can validate the street in your store method, i’m assuming the table in the database is called streets
and has a primary key id
JavaScript
$this->validate($request, [
'home_number' => 'required',
//...
'street_id" => 'exists:streets,id',
//...
'year_create' => 'required',
]);
Maybe street_id
is not present in the attribute $fillable
of your House model and it’s not set to '*'
.
Change the way you save the model
JavaScript
$homes = new Houses();
$home->home_number = $request->get('home_number');
$home->passport = $request->get('passport');
$home->option_1 = $request->get('option_1');
$home->option_2 = $request->get('option_2');
$home->street_id = $request->get('street_id');
$home->option_3 = $request->get('option_3');
$home->garage = $request->get('garage');
$home->apartments = $request->get('apartments');
$home->s_full = $request->get('s_full');
$home->s_life = $request->get('s_life');
$home->s_nlife = $request->get('s_nlife');
$home->status = $request->get('status');
$home->year_create = $request->get('year_create');
$home->save();
if ($request->hasFile('image') && $request->file('image')->isValid()) {
$homes->addMediaFromRequest('image')->toMediaCollection('images');
}
or set in Houses class
JavaScript
protected $fillable = ['*'];