2017-09-26 3 views
0

모델 클래스의 이름에 별칭을 사용하기 위해 "USE"를 사용하여 laravel eloquent 메서드에서 관련 모델의 클래스 이름을 사용하려고합니다. 예를 들어, 내가 사용하고 USERPROFILE 모델 클래스 :laravel에서 관련 모델 클래스 사용

namespace App\Models; 
use Illuminate\Database\Eloquent\Model; 
use App\Models\UserProfile; 

그리고 지금은 다음과 웅변에 사용하고 있습니다 :

public function profileDetails() { 
    return $this->hasOne('UserProfile', 'user_id', 'id'); 
} 

을하지만이 Class 'UserProfile' not found 의 오류가 발생 내가 직접 이름을 전달하는 경우 이 웅변의 첫 번째 인수에 경로와 관련 모델은, 그것은 작동하고 잘

public function profileDetails() { 
    return $this->hasOne('App\Models\UserProfile', 'user_id', 'id'); 
} 

는로 작동하지 않는 이유가 궁금하네요

+0

당신이'USERPROFILE :: class' (따옴표)를 사용할 수 없습니다 5.5 PHP를 사용하는 경우. 위에서 언급 한 '사용'을 활용할 수있는 유일한 방법은 아닙니다. 'use'는 클래스를 로컬로 앨리어스 (alias)시킬 수는 있지만 클래스의 정규화 된 이름은 실제로 변경하지 않습니다. – apokryfos

+0

@JimWright가 해결책을 제시했습니다. 당신이 잘못 클래스 경로를 부여했기 때문에 –

+0

@apokryfos 그것은 나를 위해 작동합니다. 감사!! 예를 들어이 클래스의 인스턴스를 만들 수있는 또 다른 방법이 있습니다. 'new UserProfile' – Manu

답변

5

use 클래스를 사용하면 클래스에서 해당 파일을 사용하기 위해 가져 오기 만하므로 참조 할 때 전체 경로를 사용할 필요가 없습니다. 별칭이라고 생각하면됩니다. 전체 클래스 경로가 파일의 상대 클래스 이름과 같지 않다는 점도 유의해야합니다. 전체 클래스 경로에는 항상 전체 네임 스페이스가 포함됩니다.

관계 설정 Eloquent는 자신의 네임 스페이스에서 작동 할 때 개체를 만들 수 있도록 전체 클래스 경로가 필요합니다. 모든 클래스에서 ::class을 사용하여 전체 클래스 경로를 얻을 수 있습니다.이 경우에는 App\Models\UserProfile입니다.

은 다음 예를 보자

  1. 웅변은 관계 클래스가 존재하지 않는 \UserProfile 생각합니다.

    public function profileDetails() { 
        return $this->hasOne('UserProfile', 'user_id', 'id'); 
    } 
    
  2. 설득력 존재 클래스 \App\Models\UserProfile를 찾습니다!

    public function profileDetails() { 
        return $this->hasOne('App\Models\UserProfile', 'user_id', 'id'); 
    } 
    
  3. 설득력 존재 클래스 \App\Models\UserProfile를 찾습니다! 이것은 다른 클래스를 참조하는 가장 신뢰할 수있는 방법입니다.

    public function profileDetails() { 
        return $this->hasOne(UserProfile::class, 'user_id', 'id'); 
    } 
    
+0

감사합니다 !! 예를 들어이 클래스의 인스턴스를 만들 수있는 또 다른 방법이 있습니다. 'public function profileDetails() { return $ this-> hasOne (새로운 UserProfile, 'user_id', 'id'); }' – Manu

+0

니스! 나는 당신이 실제 상황을 통과 할 수 있다는 것을 몰랐습니다. 어떤 유스 케이스가 있는지 잘 모르지만 알아두면 편리합니다.) –