使用Eloquent将数组附加到查询

时间:2014-11-10 07:03:21

标签: laravel laravel-4 eloquent

我有一个 USER 表,一个 ITEMS 表和一个 LIKES 表。我从Items表中随机抽取了9个项目(名为'categories'),我希望得到一个喜欢该项目的用户数组。我正在返回一个JSON响应,所以就我所知,我不能使用laravel的ORM关系。我希望能够查看结果(使用javascript),如下所示:

foreach item
     item->price
     ....
     foreach user
     (this is how i wish to look through the users with js)
     endforeach
endforeach
{{--Im trying to get an output that looks like so--}}
0: {
   cost: 409
   views: 0
   ...
   user_like_id: {1,5,2,4,5}
}

编辑:这就是我想将数组附加到...

$likes = Category::orderByRaw("RAND()")
             ->leftJoin('likes', 'likes.item_id', '=', 'categories.id')
             ->take(9)
             ->get();

我对编程比较陌生,所以请不要扼杀这个问题

2 个答案:

答案 0 :(得分:0)

Laravel提供了从对象制作json的方法。第一个也是最简单的是雄辩的toJson()方法:

$likes = Category::orderByRaw("RAND()")
             ->leftJoin('likes', 'likes.item_id', '=', 'categories.id')
             ->take(9)
             ->get()
             ->toJson();

$likes现在是json。

第二种方法: 如果从控制器或routecallback函数返回模型,则laravel将其作为json返回。所以:

class MyController extends Controller{
    public function getIndex(){
       return Category::orderByRaw("RAND()")
             ->leftJoin('likes', 'likes.item_id', '=', 'categories.id')
             ->take(9)
             ->get();
    }
}

此示例返回一个非常有用的json响应!

答案 1 :(得分:0)

我实际上得到了我想要的东西:

$likes = Category::orderByRaw("RAND()")
                  ->take(9)
                  ->with(array('getLikes' => function($query)
                  {    
                      $query->with('getUser');
                  }))
                  ->get();

完全按照我想要的方式工作:)感谢你的建议