ral*_*alu 95 php laravel eloquent
我在Eloquent中有2个连接表,即主题和用户.
主题模型:
public function user() {
return $this->belongs_to('User');
}
Run Code Online (Sandbox Code Playgroud)
用户模型:
public function themes() {
return $this->has_many('Theme');
}
Run Code Online (Sandbox Code Playgroud)
我的Eloquent api电话如下:
return Response::eloquent(Theme::with('user')->get());
Run Code Online (Sandbox Code Playgroud)
它返回主题中的所有列(没关系),以及来自用户的所有列(不是很好).我只需要用户模型中的"用户名"列,如何限制查询?
小智 102
更改模型以指定要选择的列:
public function user() {
return $this->belongs_to('User')->select(array('id', 'username'));
}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记包括您正在加入的列.
Jav*_*olz 37
使用- > pluck()方法
$roles = DB::table('roles')->pluck('title');
Run Code Online (Sandbox Code Playgroud)
如果要检索包含单个列的值的数组,可以使用pluck方法
使用- > lists()方法
$roles = DB::table('roles')->lists('title');
Run Code Online (Sandbox Code Playgroud)
此方法将返回角色标题数组.您还可以为返回的数组指定自定义键列:
Mel*_*vin 28
您可以在get参数中提供一系列字段,如下所示:
return Response::eloquent(Theme::with('user')->get(array('user.username'));
Run Code Online (Sandbox Code Playgroud)
更新(对于Laravel 5.2)从文档中,您可以这样做:
$response = DB::table('themes')
->select('themes.*', 'users.username')
->join('users', 'users.id', '=', 'themes.user_id')
->get();
Run Code Online (Sandbox Code Playgroud)
ayk*_*kut 21
我知道,你要求Eloquent,但你可以使用Fluent Query Builder
$data = DB::table('themes')
->join('users', 'users.id', '=', 'themes.user_id')
->get(array('themes.*', 'users.username'));
Run Code Online (Sandbox Code Playgroud)
Saj*_*raf 15
我就是这样做的
$posts = Post::with(['category' => function($query){
$query->select('id', 'name');
}])->get();
Run Code Online (Sandbox Code Playgroud)
用户2317976的第一个回答对我不起作用,我正在使用laravel 5.1
Jas*_*wis 11
另一个选项是利用$hidden模型上的属性来隐藏您不想显示的列.您可以动态定义此属性或在模型上设置默认值.
public static $hidden = array('password');
Run Code Online (Sandbox Code Playgroud)
现在,当您返回JSON响应时,将隐藏用户密码.
您也可以以类似的方式动态设置它.
User::$hidden = array('password');
Run Code Online (Sandbox Code Playgroud)
使用分页
$data = DB::table('themes')
->join('users', 'users.id', '=', 'themes.user_id')
->select('themes.*', 'users.username')
->paginate(6);
Run Code Online (Sandbox Code Playgroud)
user2317976引入了一种很好的静态方法来选择相关表的列.
这是我发现的一个动态技巧,所以你可以在使用模型时得到你想要的任何东西:
return Response::eloquent(Theme::with(array('user' => function ($q) {
$q->addSelect(array('id','username'))
}))->get();
Run Code Online (Sandbox Code Playgroud)
我刚刚发现这个技巧也适用于load().这很方便.
$queriedTheme->load(array('user'=>function($q){$q->addSelect(..)});
Run Code Online (Sandbox Code Playgroud)
确保您还包含目标表的密钥,否则将无法找到它.
小智 6
这条路:
Post::with(array('user'=>function($query){
$query->select('id','username');
}))->get();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
184502 次 |
| 最近记录: |