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']);