2014-12-30 29 views
0

我對Laravel如何處理數據透視表有疑問:Laravel - 數據透視表 - 沒有連接引發錯誤

總結:2個模型,項目和階段。

項目

+----+----------+ 
| 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

當然,這是調試的輸出:嘗試獲取非對象的屬性(View:/home/pete/project/app/views/projects.blade.php)。這是我想要檢索信息的視圖中的行:​​{{$ project-> stages_accomp() - > orderBy('date','desc') - > first() - > pivot-> date}} and stages_accomp @ Project:return $ this-> belongsToMany('Stage') - > withPivot('date','info'); [試圖闖入不同的路線......成功一點點] – Pete

回答

1

的問題是在你查看通話:

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

當你有沒有stage分配->first()將返回null的項目。

如果你想訪問一個非對象的屬性(在這種情況下null

您需要添加一點點檢查類似這樣的PHP不喜歡它:

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

它將確保first()返回一個真值(不是null),並且還將值賦給變量$stage

+0

感謝盧卡斯。不知道Eloquent是否會自動處理它,但在空值的情況下拋出異常聽起來很合理。 – Pete