可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I need to alias when I do a Laravel eager loading:
$posts = Post::with(array('images as main_image' => function($query) // do not run { $query->where('number', '=', '0'); })) ->where('id', '=', $id) ->get(); return Response::json($posts);
I need to to this because I want the JSON response like this:
[ { "id": 126, "slug": "abc", "name": "abc", "created_at": "2014-08-08 08:11:25", "updated_at": "2014-08-28 11:45:07", "**main_image**": [ { "id": 223, "post_id": 126 ... } ] } ]
It is possible?
回答1:
Perfect! you give me the idea. Finally I've done this:
Post.php
public function main_image() { return $this->hasMany('FoodImage')->where('number','=','0'); } public function gallery_images() { // for code reuse return $this->main_image(); }
PostController.php
$posts = Post::with:with('main_image')->with('gallery_images') ->where('id', '=', $id) ->get();
回答2:
I don't think you can do that with Eloquent, but there would be a few work-arounds that might work.
If you are using PHP 5.6, it's possible to alias the function.
use function images as main_image;
If you are using a version of PHP less than that, you can create a main_image() function and have it call images().
public function main_image() { return $this->images(); }