2014-12-30 1 views
0

Laravel이 피벗 테이블을 처리하는 방법에 대한 질문이 있습니다.Laravel - 피벗 테이블 - No join을하면 오류가 발생합니다.

요약 : 프로젝트 및 스테이지의 두 가지 모델입니다.

프로젝트

+----+----------+ 
| id | name | 
+----+----------+ 
| 1 | Project1 | 
| 2 | Project2 | 
+----+----------+

단계

+----+--------+ 
| id | name | 
+----+--------+ 
| 1 | Stage1 | 
| 2 | Stage2 | 
| 3 | Stage3 | 
+----+--------+

그리고이 정보를 보여주는거야

+----+------------+----------+------------+-----------+ 
| id | project_id | stage_id | date | info | 
+----+------------+----------+------------+-----------+ 
| 1 |   1 |  1 | 2014-12-20 | Moreinfo1 | 
| 2 |   1 |  2 | 2014-12-21 | Moreinfo2 | 
| 3 |   2 |  1 | 2014-12-22 | Moreinfo3 | 
| 4 |   1 |  3 | 2014-12-23 | Moreinfo4 | 
+----+------------+----------+------------+-----------+

피벗 테이블 :

+----------+------------+------------+-----------+ 
| project | last_stage | date | info | 
+----------+------------+------------+-----------+ 
| Project1 |   3 | 2014-12-23 | Moreinfo4 | 
| Project2 |   1 | 2014-12-22 | Moreinfo3 | 
+----------+------------+------------+-----------+

그리고 모든 것이 잘 작동합니다. 그러나 새 프로젝트를 추가하면 (피벗 테이블에 대한 정보가 없기 때문에) 짜증이납니다.

잘못된 것 같습니다.

null의 경우 행을 비워 두어야한다는 점을 나타내는 방법이 있습니까? 나는 좀하고 싶습니다 :

+----------+------------+------------+-----------+ 
| project | last_stage | date | info | 
+----------+------------+------------+-----------+ 
| Project1 |   3 | 2014-12-23 | Moreinfo4 | 
| Project2 |   1 | 2014-12-22 | Moreinfo3 | 
| Project3 |   |   |   | 
+----------+------------+------------+-----------+
+0

'app/config/app.php'에서 디버깅을 활성화하거나'app/storage/logs/laravel.log'를보고 실제 오류 메시지를 게시 할 수 있습니까? – lukasgeiter

+0

물론 이것은 디버깅 결과입니다. 비 객체 속성을 얻으려고합니다 (보기 : /home/pete/project/app/views/projects.blade.php). 이것은 정보를 검색하고자하는 뷰의 라인입니다 : {{$ project-> stages_accomp() -> orderBy ('date', 'desc') -> first() -> pivot-> date}} 및 stages_accomp @ Project : return $ this-> belongsToMany ('Stage') -> withPivot ('date', 'info'); [작은 성공으로 다른 라인에 침입하려고했다] – Pete

답변

1

문제는보기에 호출입니다 :

{{ $project->stages_accomp()->orderBy('date', 'desc')->first()->pivot->date }} 

당신이 ->first()null를 반환합니다 할당 된 stage이없는 프로젝트가있을 때.

그리고 당신은

당신은 다음과 같이 약간의 검사를 추가해야합니다 (이 경우 null에)가 아닌 객체의 속성에 액세스하려면 PHP는 그것을 좋아하지 않습니다

@if($stage = $project->stages_accomp()->orderBy('date', 'desc')->first()) 
    {{ $stage->pivot->date }} 
@endif 

first()이 사실 값 (null 아님)을 반환하는지 확인하고 변수 $stage에 값을 할당합니다.

+0

고마워. 루카스. Eloquent가 자동으로 처리할지 여부는 알지 못했지만 null의 경우 예외를 발생시키는 것은 논리적 인 것으로 들립니다. – Pete