如何在Laravel Eager Loading中添加别名

时间:2014-08-28 13:04:13

标签: laravel eloquent eager-loading

当我进行Laravel急切加载时,我需要别名:

$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);

我需要这个,因为我想要像这样的JSON响应:

[
  {
    "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
        ...
      }
    ]
  }
]

有可能吗?

2 个答案:

答案 0 :(得分:2)

完美!你给我这个主意。最后我做到了这一点:

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

答案 1 :(得分:0)

我认为你不能用Eloquent做到这一点,但会有一些可行的解决办法。

如果您使用的是PHP 5.6,则可以对该功能进行别名。

use function images as main_image;

如果您使用的PHP版本低于此版本,则可以创建main_image()函数并将其调用images()

public function main_image()
{
    return $this->images();
}