Laravel 5 - 控制器中的DB :: table不返回相关对象

问题描述 投票:0回答:1

我的控制器中有这个代码:

        $messages = DB::table('kidmessages')
                ->whereIn('kid_id', function($query) {
                    $query->select(DB::raw('id'))
                    ->from('kids')
                    ->whereRaw('kids.place_id = ' . User::find(Auth::id())->place->id);
                })
                ->orderBy(Input::get('orderBy', 'created_at'), 'desc')
                ->get();

并且它返回一个包含我需要的数据的数组,但是如果我尝试这个:(状态和kidmessage是1对多的关系)

dd($messages->get(0)->state);

我得到了一个Undefined property: stdClass::$state

但是,如果我将其更改为:

    dd($messages->get(0)->state_id);

我得到状态的id(整数)。

做一个$messages = Kidmessages::all();会返回没有Undefined property: stdClass::$state错误的状态对象。

让我意识到DB :: table不返回与之相关的对象。

任何线索如何让DB :: table返回所有对象?

PD。那个问题我从中得到了它:

select * from kidmessages where kid_id in(select id from kids where
place_id = (select place_id from users where id=10)) order by created_at desc;

如果有一种方法可以在不使用DB :: table的情况下复制该SQL查询,那可能会有所帮助。

laravel
1个回答
0
投票

试试这个连接查询

 $messages  = DB::table('kidmessages')
            ->join('kids', 'kids.id', '=', 'kidmessages.kid_id')
            ->join('users', 'users.place_id', '=', 'kids.place_id')
            ->where('users.id', 10)  
            ->orderBy('kidmessages.created_at', 'desc')
            ->get();
© www.soinside.com 2019 - 2024. All rights reserved.