我有以下模型结构
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
然而,这样做会抛出上面提到的错误。为什么会为此抛出错误?我还在检查 如果它存在,但在这种情况下似乎没有注意?
任何解释都表示赞赏。
由于
答案 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->userActivityType
,userActivityType
是userActivity
的子对象,因此如果没有userActivity
,那么当您使用$user->userActivity->userActivityType
时,您会收到错误消息,因为除非$user->userActivity
可用,否则您可以使用userActivityType
。因此,您需要检查$user->userActivity
是否可用,然后您可以检查userActivityType
下是否还有$user->userActivity
。所以你可以用以下东西来做:
@if($ua = $user->userActivity && $ua->userActivityType)
@endif