Eloquent 预加载报属性不存在问题?

//预加载
        $user = User::with('hasManyPost')->get();
        foreach ($user as $value){
            echo $value->hasManyPost->title;
            //var_dump($value->hasManyPost);
        }

这段代码运行后会报Property [title] does not exist on this collection instance. `$value->hasManyPost`返回的不就是object吗,Post表内是有title列的。为啥会提示没有title呢

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2
66

这里有个小坑
预加载需要 select 关联的2个key

$data = $query->with(['appointment'=>function($db){
            $db->select('id','buy_id','sell_id','house_id')
                ->with(['buyer'=>function($db1){
                    $db1->select('id','nickname as buy_name','phone as buy_phone');
                }, 'host'=>function($db2){
                    $db2->select('id','nickname as sell_name','phone as sell_phone');
                },'house'=>function($db3){
                    $db3->select('house.id','community.id as c_id','community.title','building_num','house.unit_num','room_num','host_name','host_phone')
                        ->leftJoin('community','community.id','house.community_id');
                }]);
        }]);
    public function buyer(){
        return $this->hasOne(User::class,'id','buy_id');
    }
6年前 评论

@66 额貌似脑抽了,要打印从表的列数据是要加个内层循环的,一对多查询出来的对象里从表数据是以数组嵌套对象形式返回的[{"id":6,"title":"Julia Nienow"}]

//预加载
foreach ($user as $value) {
            echo 'userName:'.$value->name.'<br>';
            //return $value->hasManyPost ;
            foreach ($value->hasManyPost as $item) {
                echo 'postId:'.$item->id . '<br>postTile:' . $item->title . '<br>';
            }
        } 

这样就可以返回了,手册上面的示例有点坑啊。。。

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!