2016-10-01 2 views
0

나는 다른 사람들을 따라하고 그들로부터 업데이트를받는 트위터의 팔로우처럼 작동하는 팔로우 시스템을 가지고있다.사용자 상태와의 관계

public function follows() 
{ 
    return $this->hasMany('App\Follow'); 
} 

이 분명히이 사람에 따라 사용자의 모든 레코드를 가져옵니다

나는 나의 User.php 모델에서 설정이 관계를 가지고있다.

그러나 사람의 프로필 페이지를 표시 할 때 사용자 ID가있는 경우 팔로우 레코드가 있는지 확인하는 관계를 원합니다.

뭔가 같은 :

public function userFollow() 
{ 
    return $this->hasOne('App\Follow')->where('user_id', Auth::user()->id); 
} 

그래서 지금 내 프로필 페이지 쿼리는 다음과 같습니다.이만큼 사용자가 로그인으로 작동

$user = User::where('username', $username) 
    ->with('userFollow') 
    ->first(); 

사용자 없는 경우 로그인하면 페이지에 다음과 같은 오류가 표시됩니다.

ErrorException in User.php line 28: Trying to get property of non-object

이걸 고쳐? 관계에서 조건을 사용하는 적절한 방법은 무엇입니까?

답변

0

사용자가 로그 아웃 한 후 Auth :: user()가 null 인 이유는 사용자 세션이 종료 되었기 때문입니다. Auth :: user()는 더 이상 객체가 아니므로 null 객체에서 ID를 가져올 수 없습니다.

여기 당신이 그때는 인증 된 사용자에 대한 보이지 않는 것

public function userFollow() 
{ 
    $userId = Auth::user() ? Auth::user()->id : $this->id; 
    return $this->hasOne('App\Follow')->where('user_id', $userId); 
} 

과 같은 작업을 수행 할 수 있습니다, 그것은 단지 특정 사용자 테이블의 ID를 얻을 것이다.

+0

좋아,하지만 제안 된 접근 방식을 것입니까? –

+0

사용자가 로그 아웃 한 경우에도 작동하지만 로그인 한 상태에서는 아무런 기록도 얻지 못합니다. –

0

관계에서 조건을 사용하는 적절한 방법 Constraining eager loads

public function userFollow() 
{ 
    return $this->hasOne('App\Follow'); 
} 

그리고를 사용하고는,

if(Auth::check()) 
{ 
     $user = User::where('username', $username) 
      ->with(['userFollow'=>function($query) 
       { 
        $query->where('user_id', Auth::user()->id); 
       }]); 
      ->first(); 
}