Answers:
更改模型以指定要选择的列:
public function user() {
return $this->belongs_to('User')->select(array('id', 'username'));
}
并且不要忘记添加您要加入的列。
使用-> pluck()方法
$roles = DB::table('roles')->pluck('title');
如果要检索包含单个列的值的数组,则可以使用pluck方法
使用-> lists()方法
$roles = DB::table('roles')->lists('title');
此方法将返回角色标题数组。您还可以为返回的数组指定一个自定义键列:
您可以在get参数中提供一个字段数组,如下所示:
return Response::eloquent(Theme::with('user')->get(array('user.username'));
UPDATE(对于Laravel 5.2)在docs中,您可以执行以下操作:
$response = DB::table('themes')
->select('themes.*', 'users.username')
->join('users', 'users.id', '=', 'themes.user_id')
->get();
SQLSTATE[42S22]: Column not found
,并且SQL不包含中的表with
。错误上显示的sql是“ SELECT fk_table.column1 FROM main_table”。
我知道,您要求口才好,但您可以使用Fluent Query Builder来做到这一点
$data = DB::table('themes')
->join('users', 'users.id', '=', 'themes.user_id')
->get(array('themes.*', 'users.username'));
这就是我的方法
$posts = Post::with(['category' => function($query){
$query->select('id', 'name');
}])->get();
user2317976的第一个答案对我不起作用,我使用的是laravel 5.1
pivot
到$ hidden的Post Model数组中protected $hidden = ['pivot']
另一种选择是利用$hidden
模型上的属性来隐藏您不想显示的列。您可以动态定义此属性,也可以在模型上设置默认值。
public static $hidden = array('password');
现在,当您返回JSON响应时,用户密码将被隐藏。
您也可以以类似方式即时设置它。
User::$hidden = array('password');
static
。
user2317976引入了一种很棒的静态方式来选择相关表的列。
这是我发现的动态技巧,因此您可以在使用模型时获得所需的一切:
return Response::eloquent(Theme::with(array('user' => function ($q) {
$q->addSelect(array('id','username'))
}))->get();
我刚刚发现这个技巧也可以与load()一起使用。这很方便。
$queriedTheme->load(array('user'=>function($q){$q->addSelect(..)});
确保还包括目标表的键,否则将无法找到它。
我知道这是一个古老的问题,但是,如果您要像问题的作者一样构建API,请使用输出转换器执行此类任务。
Transofrmer是您实际的数据库查询结果和控制器之间的一层。它允许轻松地控制和修改将要输出给用户或API使用者的内容。
在Laravel 4中,您可以通过在模型中添加以下内容来隐藏某些字段以免返回。
protected $hidden = array('password','secret_field');
http://laravel.com/docs/eloquent#converting-to-arrays-or-json
在Laravel 5.5上,最干净的方法是:
Theme::with('user:userid,name,address')->get()
您添加一个冒号,并且希望选择的字段之间用逗号隔开,并且它们之间没有空格。
查看http://laravel.com/docs/database/eloquent#to-array
您应该能够定义您不想在api中显示的列。
Response
请问我是否使用需要导入的类?