【发布时间】:2017-05-28 22:36:12
【问题描述】:
我收到此代码的此错误
<?php foreach(App\Campaign::all() as $campaign) { ?>
<?php
$category_id = $campaign->category->id;
$emailTemplates = App\EmailTemplate::where('category_id', $category_id);
$lastEmailNumber = $emailTemplates->latest()->first()->number;
$currentEmailNumber = $campaign->emails->last()->number;
?>
<?php for ($i = $currentEmailNumber + 1; $i < $lastEmailNumber; $i++) { ?>
<?php $pass = $emailTemplates->where("number", $i)->first()->password; ?>
<?php } ?>
<?php } ?>
我知道这次$currentEmailNumber = 0 和$lastEmailNumber = 14
问题来自第 9 行的变量 $i。如果我不使用 $i,而是使用 1 到 14 之间的任何数字,它不会出现任何错误。例如:
<?php $pass = $emailTemplates->where("number", 10)->first()->password; ?>
但是,如果我只显示$i,没有所有那句话,它就会正确显示。
可能是演员阵容问题。
【问题讨论】:
-
您正在尝试获取非对象的属性,这意味着您正在尝试从不存在的对象中获取属性,我高度怀疑此错误来自
$i我的猜测是 $campaign犯了错误。可以发这两个吗?dd($emailTemplates->latest()->first()->number);dd($$campaign->emails->last()->number); -
它得到 14 和 0。奇怪的是,如果我将 1 和 14 放在循环中。
for ($i = 0 + 1; $i < 14; $i++)它不适用于<?php $pass = $emailTemplates->where("number", $i)->first()->password; ?>上的 $i 但如果我输入例如<?php $pass = $emailTemplates->where("number", 14)->first()->password; ?>或 1 到 14 之间的任何数字,它就可以工作。