2016-03-03 66 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