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

时间:2017-12-25 08:11:31

标签: laravel

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

        $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查询,那可能有所帮助。

1 个答案:

答案 0 :(得分: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();