2014-11-19 5 views
0

내가 2 개 주 테이블이있는 데이터베이스 가지고 : Laravel 설득력 카운트 hasMany의 관계

etablissement 
site 

그래서 내가 2 개 모델

에게 Site.php

class Site extends Eloquent { 
    public function etablissement() { 
     return $this ->hasOne('Etablissement','code_etablissement','code_site'); 
    } 
} 

Etablissement.php을 만들었을

class Etablissement extends Eloquent { 
    public function sites() { 
     return $this ->hasMany('Site', 'code_etablissement', 'code_etablissement'); 
    } 

    public function etablissementCountSites() { 
     return $this->sites->count(); 
    } 
} 

당신이 볼 수 있듯이, 여기 나의 관계가 작동하는 방법은 다음과 같습니다

"ETABLISSEMENT"배수 "사이트"

"사이트"하나를 가질 수있다 "ETABLISSEMENT"

을 가질 수 있습니다

"etablissement"기본 키은 "code_etablissement"

"site"기본 키가 참조하는 외래 키 "code_etablissement을"을 가진, "code_site"가 "etablissement.code_etablissement"나는 얼마나 많은 "사이트"에 "ETABLISSEMENT"계산 할

. 이것이 내가 위에 "etablissementCountSites()"함수를 만든 이유입니다. 그래서 , 내 컨트롤러, 내가이 만드는 중이라서 : 모든

@for ($i = 0 ; $i < count($etablissement); $i ++) 
      <a class="btn popoverOption" data-content="Nombre de sites total : {{$compteurSites[$i]}}" rel="popover" data-original-title="{{$etablissement[$i]->code_etablissement}}" data-placement="bottom" href="{{ URL::to('dashboard_etablissement/' . $etablissement[$i]->code_etablissement)}}">{{$etablissement[$i]->nom}}</a><br> 
@endfor 

accueil_blade.php 작동합니다 : HomeController.php

private function gen_accueil() 
    { 
     $etablissement = Etablissement::select('code_etablissement','nom')->from('etablissement')->orderBy('code_etablissement')->get(); 
     $sitesCounter = Etablissement::with('etablissementCountSites')->get(); 

     return View::make('accueil', array('which_actif' => 0, 'etablissement' => $etablissement, 'compteurSites' => $sitesCounter)); 
    } 

그리고 내 블레이드 페이지에서을 나는이 있습니다 ...하지만이 오류가있어 :

'MYNET.etablissements' 존재 (SQL : 선택 * etablissements에서)하지 않는

내가 모든 코드를 통해 검색, 난 언제 어디서나 "ETABLISSEMENT S"단어가 없습니다. 그러나 나는 이전에 가지고 있었다. Laravel이 이것을 새롭게하지 않았을 가능성이 있습니까?

+0

따라서 모델에'$ table'과'$ primaryKey' 속성을 설정하십시오. 'hasOne' 관계를'belongsTo'로 변경하십시오. –

+0

보호 변수 기본 키와 테이블을 추가했습니다. 관계를 belongsTo로 변경했습니다. 이제는 다음과 같습니다 : 비 객체에서 member 함수 addEagerConstraints()를 호출하십시오. –

+0

간단한 메소드 인 관계에서 관계'with (etablissementCountSites) '를로드하려고하기 때문에 관계. 이걸 읽고, 당신을위한 답변자가 있어요 http://stackoverflow.com/a/25665268/784588 –

답변

0

Laravel 실제로 제공되는 경우 테이블 이름을 가정 할 때 모델 이름을 복수로하여 작성합니다. 모델에 다음을 추가하십시오.

class Establissment extends Eloquent 
{ 
    protected $table = 'thetablenamehere'; 
} 

또한 표를 복수형으로 명명하는 것이 좋습니다.