How to alias in Laravel Eager Loading

匿名 (未验证) 提交于 2019-12-03 01:38:01

问题:

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(); } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!