如何解决「Trying to get property 'selleruserid' of non-object」错误?
解决「Trying to get property 'selleruserid' of non-object」错误
错误原因
你的代码存在两个核心问题:
$featured是数组结构(你给它赋值了$featured['items']),但你用对象访问符->去获取selleruserid,语法逻辑错误。- 即使修正为
$featured['items'],它也是通过get()返回的Eloquent集合(包含多个商品模型实例的集合),不是单个对象,无法直接访问selleruserid属性。
解决方案
根据需求分两种场景处理:
场景1:仅获取第一个推荐商品的selleruserid
先判断集合是否有数据,再取第一个元素的属性:
$selleruserid = 0; $featured['items'] = Items::with('Ratings') ->select('items.item_id', 'items.user_id AS selleruserid', 'items.item_liked','items.item_slug','items.item_preview','items.item_name','items.item_type','users.user_photo','users.username','users.user_document_verified','items.updated_item','items.item_sold','items.free_download','items.item_flash','items.item_type_cat_id','items.regular_price','items.item_token', 'items.mainpage_boost_last') ->leftjoin('users', 'users.id', '=', 'items.user_id') ->where('items.item_status','=',1) ->where('items.mainpage_boost_last','>', $today_date) ->where('items.drop_status','=','no') ->orderBy(DB::raw('RAND()')) ->take($setting['setting']->home_featured_items) ->get(); // 先检查集合非空,再取第一个元素的selleruserid if (!$featured['items']->isEmpty()) { $selleruserid = $featured['items']->first()->selleruserid; } $checkuser = Items::checkuser($selleruserid);
场景2:遍历所有推荐商品的selleruserid
如果要处理每个商品的selleruserid,用循环遍历集合:
$featured['items'] = Items::with('Ratings') // 省略查询代码 ->get(); foreach ($featured['items'] as $item) { $selleruserid = $item->selleruserid; $checkuser = Items::checkuser($selleruserid); // 此处添加你的业务逻辑 }
额外提示
- 必须确认是单个模型实例时,才能用
->访问属性,集合类型需先提取单个元素。 - 如果查询仅需一条数据,可直接用
first()代替get()获取单个模型实例,但要处理查询为空的情况。
内容的提问来源于stack exchange,提问作者tartari
相关产品推荐
相关产品推荐

