【问题标题】:Laravel ErrorException Trying to get property of non-objectLaravel ErrorException 试图获取非对象的属性
【发布时间】: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-&gt;latest()-&gt;first()-&gt;number);dd($$campaign-&gt;emails-&gt;last()-&gt;number);
  • 它得到 14 和 0。奇怪的是,如果我将 1 和 14 放在循环中。 for ($i = 0 + 1; $i &lt; 14; $i++) 它不适用于 &lt;?php $pass = $emailTemplates-&gt;where("number", $i)-&gt;first()-&gt;password; ?&gt; 上的 $i 但如果我输入例如 &lt;?php $pass = $emailTemplates-&gt;where("number", 14)-&gt;first()-&gt;password; ?&gt; 或 1 到 14 之间的任何数字,它就可以工作。

标签: php laravel


【解决方案1】:

已解决:

改变了这个:

<?php $pass = $emailTemplates->where("number", $i)->first()->password; ?>

为此:

<?php $pass = App\EmailTemplate::where('category_id', $category_id)->where("number", $i)->first()->password; ?>

不知道为什么会这样。

【讨论】:

    猜你喜欢
    • 2017-08-02
    • 2018-04-14
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2021-07-19
    • 2016-11-30
    • 2017-02-25
    • 1970-01-01
    相关资源
    最近更新 更多