我有很多单独的模型,我想将它们全部组合起来以利用热量加载。
$match_query = "select * from feeds " .
"WHERE (user_id IN ($users_size)) " .
"OR (target_id IN ($slugs_size) AND feedable_type = 'review') " .
"ORDER BY created_at DESC LIMIT 5;";
//Query works fine and return 2 results
$results = DB::select($match_query, $consolidatedArray);
//to convert returned php standard obj to array
$results = json_decode(json_encode($results), True);
$all = [];
foreach($results as $result){
$x = new \App\Feed($result);
//I am able to get relation like this for single item
// $x->user;
$all[] = $x;
}
//but this thing is not working (i am trying to eager load)
$data = $all->with('user');
我收到以下错误
ErrorException in FeedsRepository.php line 67:
Trying to get property of non-object
解决方案是什么?
答案 0 :(得分:0)
$ all是一个数组。数组不是对象。因此,当您使用()调用$ all->时,您会收到错误"尝试获取非对象的属性"。非常简单:)。
您的代码似乎不必要地复杂化了。您在Eloquent和Query Builder中查询并不难。阅读一些文档并开始使用其强大的功能,而不是破解你的方式:)。
您可以使用这个更易读的代码段(或类似内容)替换您的代码:
$results = Feed::whereIn('user_id', $users_size)
->orWhere(function($q) use($slugs_size) {
$q->whereIn('target_id', $slugs_size)->orWhere('feedable_type', 'review');
})
->with('user')
->orderBy('created_at', 'desc')->take(5)->get();
这里要记住的重要一点是,eloquent还包含了查询构建器的所有功能。在大多数情况下,它比完整的SQL查询更容易阅读和维护。
阅读材料: