Laravel:如果关系不存在,则不显示错误
我有控制器,我得到的数据是这样的 $events=Eventm::with('teacher')->get() 每一个事件都有一位老师,那么在我看来,我收集的数据如下Laravel:如果关系不存在,则不显示错误,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有控制器,我得到的数据是这样的 $events=Eventm::with('teacher')->get() 每一个事件都有一位老师,那么在我看来,我收集的数据如下 $event['teacher']->name 如果它们是教师和事件之间的关系,那么它的工作就很好。但如果他们的“教师”列中没有教师(或管理员删除教师,但事件仍包含教师id)。视图根本不渲染,尝试获取非对象的属性时显示错误。我想,如果删除了教师数据,视图将不会抛出错误,只显示没有文本 $event['teacher']-&
$event['teacher']->name
如果它们是教师和事件之间的关系,那么它的工作就很好。但如果他们的“教师”列中没有教师(或管理员删除教师,但事件仍包含教师id)。视图根本不渲染,尝试获取非对象的属性时显示错误。我想,如果删除了教师数据,视图将不会抛出错误,只显示没有文本
$event['teacher']->name
可能吗?您可以在自己的视图中执行此操作
@if($event['teacher'])
<div class="whatever">$event['teacher']->name</div>
@else
<div class="whatever">Teacher not found.</div>
@endif
谢谢你的时间。是的,但是还有别的办法吗。我的意思是如果我在一个视图中有20个变量。这样会使视图更加复杂。
<?php
class ProcessEventsViewData {
private $events;
public function __construct($events)
{
$this->processData($events);
}
public function processData($data)
{
foreach($data as $event)
{
$this->processEvent($event);
}
}
public function processEvent($event)
{
$this->events[$event->id]['name'] = $event->name ?: 'Event name not found';
$this->events[$event->id]['teacher'] = $event->teacher ? $event->teacher->toArray() : array('name', 'Teacher not found');
}
public function getData()
{
return $this->events;
}
}
class MyController extends Controller {
$events = Eventm::with('teacher')->get();
$eventData = new ProcessEventsViewData($events);
return View::make('event')->with('events', $eventData->getData());
}
@foreach($events as $id => $event)
Event ID: {{$id}};
Event Name: {{$event['name']}};
Teacher: {{$event['teacher']['name']}};
@endforeach