Database laravel选择特定列,但具有关系

Database laravel选择特定列,但具有关系,database,laravel,eloquent,query-builder,relation,Database,Laravel,Eloquent,Query Builder,Relation,我目前正在优化我的应用程序,其中一件事是只从数据库中选择真正需要的东西 例如,当我检索用户对象时,我通常会这样做: $user = User::where($attribute, '=', $value)->first(); $user = User::where($attribute, '=', $value)->first($columns); 这段代码将返回一个包含所有列的完整用户对象。我的users表相当大,因此我认为只选择我需要的列是个好主意,如下所示: $user =

我目前正在优化我的应用程序,其中一件事是只从数据库中选择真正需要的东西

例如,当我检索用户对象时,我通常会这样做:

$user = User::where($attribute, '=', $value)->first();
$user = User::where($attribute, '=', $value)->first($columns);
这段代码将返回一个包含所有列的完整用户对象。我的users表相当大,因此我认为只选择我需要的列是个好主意,如下所示:

$user = User::where($attribute, '=', $value)->first();
$user = User::where($attribute, '=', $value)->first($columns);
这也如预期的那样起作用。但我的问题是,一旦我指定了列,$user变量的关系就不再有效,因为它不再是对象

我的问题:是否可以只选择几个列,但仍然能够使用关系,如

$user->parents
谢谢

试试这个

 $user = User::where($attribute, '=', $value)->select($columns)->first();

只需为要获取的关系添加所有外键。例如,如果要使用
parent()
关系,只需将键添加到
$columns

array_push($columns, 'parent_id');

之后,您将能够使用
parent()
关系。

是的,可以加载与选定列的关系,但为此,您必须选择该关系表的
外键

因此,这里您还必须选择
user
表中的列,该列是
parents
表中的外键,并使用
with()
提及关系

例如,如果您将
parents
表中的
user\u id
列作为外键,则当您在
first()
方法中提及列数组时,必须选择用户的
id
列,如下所示:

$user = User::with('parents')->where($attribute, $value)->first(['id','email','image']); // also select 'id' for foreign key to load relationship
使用上述代码后,您可以将父关系设置为:
$user->parents
,并且不要忘记将关系设置在您的
用户
模型中

如果用户表上的外键为
parent\u id
,属于
parents
表,则必须选择
parent\u id
列,如下代码:

$user = User::with('parents')->where($attribute, $value)->first(['parent_id','email','image']);