2016-07-11 4 views
0

У меня есть текущие отношения между клиентом и его проектовLaravel BelongsTo связь Существование

Модель проекта

public function client() 
{ 
    return $this->belongsTo('Client', 'cid'); 
} 

Контроллер проекта

public function index() { 
    $projects = Project::with('client')->orderBy('pid', 'desc')->get(); 
    $this->layout->content = View::make('projects.index')->with('projects', $projects); 
} 

Теперь все работает отлично, и я могу чтобы получить всю информацию о клиенте из представления проекта. Однако, если идентификатор клиента не существует в базе данных (в таблице клиента), я получаю сообщение об ошибке «Попытка получить свойство не-объекта». Вместо получения этой ошибки я хочу иметь возможность отправить пустой объект. Не совсем уверен, с чего начать, проверить ли я сам модель или контроллер или добавить чек в представление?

+0

Если я использую :: вместо :: для клиента, он просто пропускает всю строку проекта (я показываю проекты в таблице). Я хочу, чтобы он все еще показывал проект только с пустым контактом или «Неизвестным», если он не найден. – NyseX

ответ

0

apply constraint to eager loading. Для доказательства концепции

$users = Project::with(array('client' => function($query) 
{ 
    $query->raw(
    /*Add your constraint here to coalesce a default for cid or clients. 
    You may set a default null record in the client table for this case.*/ 
); 

}))->get(); 
0

Держу пари, когда вы предоставляете таблицу вы используете somethink как:

project.client.name 

В этом случае он должен бросить исключение, потому что клиент не существует, но вы пытаетесь получить доступ к имени свойства. Вы должны проверить, существует ли клиент при рендеринге этой таблицы.

+0

Да, да, и именно это я пытаюсь спросить, как именно я могу проверить, существует ли этот клиент или нет? Однако есть много проектов, которые загружаются, если клиент не существует в таблице клиента, я хочу, чтобы он отправил пустой объект, поэтому, когда я пытаюсь захватить имя $ projects-> client->, он возвращает нулевое значение из пустой объект не является ошибкой, так как объект не найден. – NyseX

+0

Попробуйте это в вашем коде {{isset ($ project.client)? $ project.client: 'Default'}} –

Смежные вопросы