Reputation: 1166
How do you translate this query in blade.php
$developer_contractor_association = DeveloperContractorAssociation::whereHas('defect_types', function ($query) use($id) {
$query->where('developer_contractor_associations.id', $id);
})->orwhereHas('contractor', function ($query) use($id) {
$query->where('developer_contractor_associations.id', $id);
})->first();
return view('dev-admin.contractors.associations.edit', ['developer_contractor_association' => $developer_contractor_association]);
I tried to use the method above but when it come to blade it doesn't work
@foreach($developer_contractor_association as $dca_details)
<h2> {{ $dca_details->user->name }} </h2>
<p><i class="fas fa-map-marker-alt"></i>{{ $dca_details->contractor->address }}</p>
<p><i class="fas fa-envelope"></i>{{ $dca_details->user->email }}</p>
<p><i class="fas fa-phone"></i></i>{{ $dca_details->contractor->contact_no }}</p>
@endforeach
Its says:
Trying to get property 'name' of non-object
UPDATE :
I made some mistake on query, I dont need the foreach
, this fix my code. Thanks for everyone helps
<div id="contractor-details" class="col-sm-12 col-md-12">
<h2> {{ $developer_contractor_association->contractor->user->name }} </h2>
<p><i class="fas fa-map-marker-alt"></i>{{ $developer_contractor_association->contractor->address }}</p>
<p><i class="fas fa-envelope"></i>{{ $developer_contractor_association->contractor->user->email }}</p>
<p><i class="fas fa-phone"></i></i>{{ $developer_contractor_association->contractor->contact_no }}</p>
</div>
Upvotes: 1
Views: 179
Reputation: 2469
You should use get()
instead of first()
, and after that use dd($dca_details)
variable in foreach()
to see if $dca_details has a user or not , if it had use dd($dca_details->user->name)
and best way to handle this error is using:
{{ $dca_details->user->name ?? '-' }}
Upvotes: 2
Reputation: 8618
That is because one developer_contractor_association is not have user. You must be use
@foreach($developer_contractor_association as $dca_details)
<h2> {{ $dca_details->user->name ?? 'User absent' }} </h2>
<p><i class="fas fa-map-marker-alt"></i>{{ $dca_details->contractor->address ?? ''}}</p>
<p><i class="fas fa-envelope"></i>{{ $dca_details->user->email ?? ''}}</p>
<p><i class="fas fa-phone"></i>{{ $dca_details->contractor->contact_no ?? ''}}</p>
@endforeach
or you can use
@foreach($developer_contractor_association as $dca_details)
@if(empty($dca_details->user) || empty($dca_details->contractor))
@continue
@endif
<h2> {{ $dca_details->user->name }} </h2>
<p><i class="fas fa-map-marker-alt"></i>{{ $dca_details->contractor->address }}</p>
<p><i class="fas fa-envelope"></i>{{ $dca_details->user->email }}</p>
<p><i class="fas fa-phone"></i>{{ $dca_details->contractor->contact_no }}</p>
@endforeach
Or in controller use
$developer_contractor_association = DeveloperContractorAssociation::whereHas('defect_types', function ($query) use($id) {
$query->where('developer_contractor_associations.id', $id);
})->orwhereHas('contractor', function ($query) use($id) {
$query->where('developer_contractor_associations.id', $id);
})->has('user')
->has('contractor')
->get();
return view('dev-admin.contractors.associations.edit', ['developer_contractor_association' => $developer_contractor_association]);
Upvotes: 1