laravel选择特定的列,但有关系

时间:2017-03-15 08:07:47

标签: database laravel eloquent query-builder relation

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

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

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

此代码将返回包含所有列的完整用户对象。我的用户表非常大,所以我认为只选择我需要的列是个好主意:

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

这也按预期工作。但我的问题是,只要我指定列,$ user变量的关系就不再起作用,因为它不再是一个对象。

我的问题:是否可以只选择几列,但仍然可以使用

之类的关系
$user->parents

谢谢!

3 个答案:

答案 0 :(得分:0)

试试这个

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

答案 1 :(得分:0)

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

array_push($columns, 'parent_id');

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

答案 2 :(得分:0)

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

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

例如,如果您将user_id表中的parents列作为外键,那么在id方法中提到columns数组时,必须选择用户的first()列如下:

$user = User::with('parents')->where($attribute, $value)->first(['id','email','image']); // also select 'id' for foreign key to load relationship

使用上述代码后,您可以将父母的关系设为:$user->parents,并且不要忘记在您的User模型中放置关系。

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

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