我的控制器中有这个代码:
$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查询,那可能有所帮助。
答案 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();