2015-01-09 7 views
0

현재 리포지토리/서비스 레이어 디자인 패턴을 사용하여 설정된 웹 응용 프로그램에서 작업 중입니다. 즉, 모든 비즈니스 메서드를 실행하기 전에 필요한 비즈니스 로직을 수행하는 서비스 계층이 있습니다. 저장소. 필자는 각각의 서비스 레이어에 액세스하는 모델의 각면에 대해 파사드가 있으며 이는 대부분 괜찮습니다. 그러나, 이제 나는 묵시적인 관계를 구축하려고 노력하고 있는데, 어떤 방향으로 가야하는지 잘 모르겠다 고 외벽이 두통을 일으키는 것 같습니다.Laravel Ellquent 리포지토리/서비스 디자인 패턴과의 관계

다음 코드를 보자

class Account extends Eloquent { 

    // Our table name 
    protected $table = "accounts"; 

    // Our primary key 
    protected $primaryKey = "id"; 

    /** 
    * Role Relationship 
    * 
    * Returns a list of roles associated with 
    * this account 
    */ 
    public function roles() { 
     return $this->hasMany('Role'); 
    } 

} 

이, 그것은 역할 외관을 사용하고 있기 때문에 대신 역할의 엔티티 클래스를 사용하는 그대로 작동하지 않습니다. 나는

public function roles() { 
     return $this->hasMany('RoleEntity'); 
    } 

이 작동합니다, 그러나이 가장 최적의 솔루션처럼 보이지 않도록 같은 RoleEntity로, 약간 다른 이름으로 엔터티에 대한 별칭을 설정하여, 이것에 대한 해결 방법을 알아 낸.

제 질문은 연습입니까? 또는 더 나은 아직, 이것이 전혀 일어나지 않아야합니까? 그리고 그렇지 않다면 어떻게 수정해야합니까?/어디서 잘못 되었습니까?

+1

이 Role' – lukasgeiter

답변

1

동일한 네임 스페이스에 같은 이름의 클래스가 두 개 있습니다. 동일한 클래스 이름을 사용할 수 있도록 다른 네임 스페이스를 사용하십시오.

저는 주로 \ Models를 사용하여 모델 클래스를 찾습니다.

namespace Models; 
컨트롤러에서

또는 응용 프로그램의 일부 :

\Models\Role::first(); 

참고 모델의 네임 스페이스를 변경하는 당신을 필요로하는 추가 각 모델 파일의 상단에

다른 클래스의 네임 스페이스 (예 : Str, Eloquent, Url, Redirect 등)

use Eloquent; 
use URL; 

R 모델은, 당신은 또한, 관계 기능에 네임 스페이스를 통과해야 예 : 난 당신이 다른 네임 스페이스에서 모델과 외관을 넣어`앱 \ 모델과 같은 모델을 참조하는 것이 좋습니다

public function roles() { 
    return $this->hasMany('\Models\Role'); 
} 
+0

을 \ 주셔서 감사합니다 당신의 도움. 실제로 각 클래스마다 다른 네임 스페이스를 사용하고 있습니다. 내 Account 클래스 (및 다른 모델)에서는 "namespace Entities"를 사용하고 있습니다. 내 facades에 대해 "namespace Services \\ (모델 이름);"즉 "namespace Services \ Account;"를 사용하고 있습니다. 다시 말하지만, "$ this-> hasMany ('\ Entities \ Role');" 작동하는 것처럼 보이고 이상적인 솔루션처럼 보이지는 않지만 지금은 제대로 작동해야합니다. –

+0

답변, 답변에 추가하십시오. 또한 왜 이상적인 솔루션이 아닌가? –