以下是我的模特:
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列出了其所有属性。我该如何限制,只允许说明标题的title
和language
属性?
我试过了:
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,否则数据无法链接。
我是否必须重新排练'我的收藏?
答案 0 :(得分:0)
首先不要将原始sql结果发送给json。使用变形金刚:
但是如果你不想加载任何额外的包,你可以看看http://laravel.com/docs/5.1/eloquent-serialization#hiding-attributes-from-json