Laravel:访问Eloquent对象的属性会导致“尝试获取非对象属性”错误

时间:2018-01-12 14:28:56

标签: php laravel eloquent

在我的Controller函数中,我调用以下代码:

$ad = Ad::activeRegular()->with('category', 'city')->limit($limit_regular_ads)->orderBy('id', 'desc')->get();

并成功返回Ad Eloquent模型对象。此对象具有Ad.php中定义的关系,如下所示:

class Ad extends Model
{
    public function category(){
        return $this->belongsTo(Category::class, 'category_id');
    }
}

现在问题

但在我看来,当我尝试使用以下代码获取此Category(vertisement)的Ad时:

foreach($ad as $rad){
 var_dump($rad->category->category_name)
}

它开火

  

尝试获取非对象的属性

有关信息,var_dump($rad->category)成功打印了相关Category对象的内容。

为什么我不能以这种方式访问​​对象的属性。 偶$rad->category()->category_name会引发同样的错误。

1 个答案:

答案 0 :(得分:3)

这是因为其中一个广告没有类别。

如果您希望仅在广告具有类别时显示名称,则可以使用optional()帮助您:

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <vector>
#include <array>

template <class T>
void myswap(T &a,
            T &b)
{
    T temp = a;
    a = b;
    b = temp;
}


int main() {

    const int N = 5;
    std::vector<int> vec = {112,32,11,4,7};

    std::cout << "\nInit\n";
    for (const auto &i:vec)
    {
        std::cout << i << "\t";
    }


    int j;
    for (const auto &j:vec)
    //for (int j = 0; j < vec.size(); j++)
    {

        while (j > 0 && vec[j] < vec[j-1]) 
        {
            myswap(vec[j], vec[j-1]);
            j--;
        }
    }


    std::cout << "\n\nFinal\n";
    for (const auto &i:vec)
    {
        std::cout << i << "\t";
    }

    std::cout << "\n";
    return 0;
}

或确保所有广告都有一个类别。