2016-03-03 23 views
1

我有以下型號結構Laravel 5 - 理解爲什麼條件語句需要

User 
+----+--------------+-----------------+------------+---------------------+---------------------+ 
| id | userName  |  ... 
+----+--------------+-----------------+------------+---------------------+---------------------+ 

UserActivity 
+----+--------------+-----------------+------------+---------------------+---------------------+ 
| id | activityName | userId 
+----+--------------+-----------------+------------+---------------------+---------------------+ 

UserActivityType 
+----+--------------+--------------------+------------+---------------------+---------------------+ 
| id | label  | userActivityId 
+----+--------------+--------------------+------------+---------------------+---------------------+ 

用戶可以有一個UserActivity。

一個UserActivity可以有一對多UserActivityType

現在我有一個通過標籤的方式隔開的內容的展示頁面。因此,無論何時加載此頁面, 所有的標籤內容也被加載。由於這一點,我需要處理的情況,我檢查,我想加載什麼 存在,否則我會得到一個試圖獲得...錯誤的屬性。

有一些我想明白。在其中的一頁上,我正在做這樣的事情

@if (count($user->userActivity) !== 0) 
    @if (count($($user->userActivity->userActivityType) !== 0) 
     @foreach($user->userActivity->userActivityType as $label => $value) 

     @endforeach 
    @endif 
@endif 

現在上述工作沒有問題。但是,因爲我試圖從userActivityType獲取信息,請執行 我真的需要首先檢查$ user-> userActivity?而不是做上述情況,我認爲這將更有意義 只是做

@if (count($($user->userActivity->userActivityType) !== 0) 
    @foreach($user->userActivity->userActivityType as $label => $value) 

    @endforeach 
@endif 

但是,這樣做則拋出上述錯誤。爲什麼它會爲此而拋出一個錯誤?如果存在,我仍在檢查 ,但在這種情況下似乎沒有注意到?

任何解釋讚賞。

謝謝

回答

1

錯誤是否繼續像「非物件的..屬性」?如果是這樣的話,那是因爲你不檢查無效。

,如果你把它寫這樣的

if(! is_null($user->userActivity))... 

因爲它似乎是返回類型的用戶$一個> userActivity爲「null」這將是更好的。當你試圖獲得null的屬性時; PHP引發了異常。

$user->userActivity = null; 
(null)->userActivityType; // ??? Exception thrown. 

但是,當你說

if(count(null) != 0) 

代碼工作,因爲

count(null) = 0 in php. 

如果對象設置解釋只能繼續。

+0

謝謝,我有一種感覺,這是有關的。 –

1

關於$user->userActivity->userActivityType,好了,userActivityTypeuserActivity這樣子對象,如果沒有userActivity那麼當你將使用$user->userActivity->userActivityType,你會因爲除非$user->userActivity是可用的,你可以得到一個錯誤;噸只是使用userActivityType。所以你需要檢查一個$user->userActivity是否可用,那麼你可以檢查是否也有userActivityType$user->userActivity。所以你可以使用類似的東西:

@if($ua = $user->userActivity && $ua->userActivityType) 

@endif