Лезвие Laravel: выражение if..else ведет себя неожиданно

Извините, я не смог найти лучшего заголовка для этого вопроса.

Я хочу показать ссылку «Подписаться» или «Редактировать профиль», в зависимости от того, просматривает ли аутентифицированный пользователь свой профиль или профиль другого пользователя.

Вот мой код блейда:

@if(isLogedIn())
    @if($authedUser->id !== $profile->user()->find(1)->id)
        {{link_to_action('RelationshipsController@add', 'Follow', $profile->user()->find(1)->id, ['class' => 'button radius'])}}
    @else
        {{link_to_action('ProfilesController@edit', 'Edit Profile', $authedUser->id, ['class' => 'button radius'])}}
    @endif
@endif

Теперь, если я просматриваю профили других пользователей, все в порядке (оператор if просто работает, и я вижу ссылку Follow), однако, если я пытаюсь просмотреть свой собственный профиль, laravel выдает исключение: Trying to get property of non-object. Дело в том, что $profile->user()->find(1)->id выдает это исключение, потому что, когда я жестко закодировал его в целое число, все работало правильно.

Вот строка, которая вызывает исключение:

<?php if($authedUser->id !== $profile->user()->find(1)->id): ?>

PS1: Проблема не в вложенных ifах.

PS2: В этой ситуации мой код никогда не касается части else.

EDIT: Вот ProfileController@show:

public function show($userId)
{

    try{
        $profile = $this->profileRepo->byForeignKey('user_id',$userId)->firstOrFail();
    }catch(ModelNotFoundException $e){
       throw new ProfileNotFoundException('profile not found');
    }
    return View::make('profiles.show')->with('profile', $profile);
}

person artronics    schedule 17.12.2014    source источник
comment
Я почти уверен, что это потому, что $profile->user()->find(1) возвращает null. А зачем тебе find(1)?   -  person lukasgeiter    schedule 17.12.2014
comment
{{dd($profile->user()->find(1)->id)}} перед if вызывает такое же исключение. Я думаю, что с моим ProfileController что-то не так, но я не могу понять, что это такое.   -  person artronics    schedule 17.12.2014
comment
потому что мне нужен пользователь id. $profile->user() возвращает объект BelongsTo, поэтому я использовал find(1) для получения объекта User.   -  person artronics    schedule 17.12.2014
comment
Существует ли переменная $authedUser в этом контексте?   -  person Volvox    schedule 17.12.2014
comment
@Volvox да, он существует. Кстати, проблема была в том, что find методы, которые ищут id=1   -  person artronics    schedule 17.12.2014


Ответы (1)


Из комментариев: «потому что мне нужен идентификатор пользователя. $profile->user() возвращает объект BelongsTo, поэтому я использовал find(1) для получения объекта пользователя».

В этом случае вы можете использовать динамическое свойство user вместо вызова user().

@if($authedUser->id !== $profile->user->id)

Что такое же, как

@if($authedUser->id !== $profile->user()->get()->id)

Но здесь нельзя использовать find(1). Он попытается найти объект с id = 1

person lukasgeiter    schedule 17.12.2014