Laravel 5 - 理解为什么需要条件语句

时间:2016-03-03 10:18:07

标签: laravel laravel-5 laravel-5.1

我有以下模型结构

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

然而,这样做会抛出上面提到的错误。为什么会为此抛出错误?我还在检查 如果它存在,但在这种情况下似乎没有注意?

任何解释都表示赞赏。

由于

2 个答案:

答案 0 :(得分:1)

错误是否继续像" ..非对象的属性"?如果是这种情况,那就是因为你没有空检查。

如果你那样写它会更好

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

因为似乎$ user-> userActivity的返回类型之一是" null"。当你试图得到null的属性; php提出异常。

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

但是当你说

if(count(null) != 0)

代码有效,因为

 count(null) = 0 in php.

只有设置了对象,解释器才会继续。

答案 1 :(得分:1)

关于$user->userActivity->userActivityTypeuserActivityTypeuserActivity的子对象,因此如果没有userActivity,那么当您使用$user->userActivity->userActivityType时,您会收到错误消息,因为除非$user->userActivity可用,否则您可以使用userActivityType。因此,您需要检查$user->userActivity是否可用,然后您可以检查userActivityType下是否还有$user->userActivity。所以你可以用以下东西来做:

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

@endif