首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解“试图获取非对象的属性”并加以预防

理解“试图获取非对象的属性”并加以预防
EN

Stack Overflow用户
提问于 2016-10-23 05:32:53
回答 3查看 6.2K关注 0票数 2

首先,我想为这个线程道歉,我知道在这个线程上有很多类似的线程。在他们上看了之后,我真的不明白在我的网站上发生了什么。框架是Laravel-4.2

几个小时后现场还好,一切都很顺利。现在,当我尝试访问这些页面时,很少有页面获得Trying to get property of non-object不是所有的页面..。只要2-3

例如,这是在我的控制器显示所有订单。

代码语言:javascript
复制
public function orders() {

    $orders = Order::select('*')->orderBy('order_id', 'DESC')->paginate(5);
    return View::make('site.admin.orders', [
        'orders' => $orders
    ]);
}

这在我看来

代码语言:javascript
复制
@foreach($orders as $order)
<tr>
    <td class="text-center">{{ $order->order_id }}</td>
    <td class="text-center">{{ $order->user->username }}</td>

    // few more <td>`s
</tr>
@endforeach

错误出现在第一个<td>上:

代码语言:javascript
复制
<td class="text-center">{{ $order->order_id }}</td>

完全相同的代码在其他网站上工作(拷贝这一个)。我知道在这种情况下我可以把$order->order_id改成$order['order_id'].

为什么会发生这种事?如何预防?我不明白这个错误的本质。这对我来说很奇怪,因为这是在网站的精确副本上工作的。

更新:这是我的型号

代码语言:javascript
复制
public function getOrderData($data) {

    $dataArray = json_decode($data, true);
    $data = json_decode($data);
    $arrayKeys = array_keys($dataArray);
    $arrayKeys = array_filter($arrayKeys, function($value) {
        return ($value !== 'shipping');
    });
    $productIds = implode(',', $arrayKeys);


    $products = DB::table('products')
        ->leftjoin('category', 'products.category_id', '=', 'category.category_id')
        ->leftjoin('sub_category', 'products.sub_cat_id', '=', 'sub_category.sub_cat_id')
        ->where('product_id',$productIds)
        ->get();            

    foreach ($products as $item) {
        if(!in_array($item->product_id, $arrayKeys)) continue;
        $dataArray[$item->product_id]['category'] = $item->category_name;
        $dataArray[$item->product_id]['sub_category'] = $item->sub_cat_name;

    }
    return json_decode(json_encode($dataArray)); 
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-23 06:22:01

“试图获取非对象的属性”,这意味着您正在尝试获取不存在的东西。

。在OOP中,类有对象,对象具有与它们相关联的属性。如果这些属性存在,您可以访问它们。

在你的情况下它根本不存在。要克服此问题,请在访问以下值之前使用isset():

代码语言:javascript
复制
isset($order->order_id) ? $order->order_id : 'NA';

在这种情况下,如果属性不存在,则代码不会抛出错误,相反,它将进入其他部分并打印NA。

票数 3
EN

Stack Overflow用户

发布于 2016-10-23 06:05:20

这意味着您正在尝试访问某些东西的属性,这不是一个对象。例如,如果你做这样的事情

代码语言:javascript
复制
$model = MyModel::model()->findByPk('non_existent_primary_key');

$model将是null,所以如果您这样做了

代码语言:javascript
复制
echo $model->id;

你会得到这个错误的。

票数 1
EN

Stack Overflow用户

发布于 2019-12-07 08:32:20

你是按命令返回的

代码语言:javascript
复制
return View::make('site.admin.orders', [
        'orders' => $orders
    ]);

但却试图按顺序进入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40199888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档