Laravel ORM到json:指定显示哪些列

时间:2015-10-18 08:21:23

标签: laravel orm eloquent

以下是我的模特:

class Movie extends Model
{
    protected $primaryKey = 'movieID';

    public function titles()
    {
        return $this->hasMany('App\Title', 'movieID');
    }
}


class Title extends Model
{
    public function movie()
    {
        return $this->belongsTo('App\Movie');
    }
}

现在在我的控制器中我想用一个简单的where子句来获取所有带有所有标题的电影,如下所示的ORM:

public function index()
{
    $today = (new DateTime())->format('Y-m-d');

    $collection = Movie::with('titles')
        ->where('date', '>', $today)
        ->get(array('movieID', 'date as releaseDate'));

    return Response::json($collection);
}

这样可以正常工作,但现在我只使用Movie中的所选列获得了一个json,但嵌套的Title Objects列出了其所有属性。我该如何限制,只允许说明标题的titlelanguage属性?

我试过了:

public function index()
{
    $today = (new DateTime())->format('Y-m-d');

    $collection = Movie::
        with(array('titles' => function ($query) {
            return $query->select('title', 'language', 'movieID')->get();
        }))
        ->where('date', '>', $today)
        ->get(array('movieID', 'date as releaseDate'));

    return Response::json($collection);
}

这样我得到了所需的输出,但我必须在Title中选择movie_id,否则数据无法链接。

我是否必须重新排练'我的收藏?

1 个答案:

答案 0 :(得分:0)

首先不要将原始sql结果发送给json。使用变形金刚:

  • 仅返回您需要的字段。
  • 或试用Fractal包。

但是如果你不想加载任何额外的包,你可以看看http://laravel.com/docs/5.1/eloquent-serialization#hiding-attributes-from-json