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呢

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 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');
    }
5年前 评论

@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>';
            }
        } 

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

5年前 评论

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