Laravel Eloquent select 函数导致空关系

Sha*_*ale 4 laravel eloquent

以下是我的查询

$user = User::select(['uuid','name','about'])->with(['education','work'])->first();
Run Code Online (Sandbox Code Playgroud)

这将返回关系education和的空数据work,但是如果我select从查询中删除函数,我将获取关系中的数据,并且它还返回我不想要的用户表的所有列。

如何解决这个问题

Dev*_*evK 8

问题是关系 ( with(...)) 执行附加查询以获取相关结果。假设您有一对多的关系,其中users有 many worksUser::with('work')->find(1)然后将执行这两个查询:

select user where id = 1select works where user_id = 1

因此,基本上为了能够执行第二个查询(获取关系数据),您需要id在 select 语句中包含(或您引用的任何列)。

使固定:

$user = User::select(['uuid','name','about', 'id'])->with(['education','work'])->first();
Run Code Online (Sandbox Code Playgroud)

同样的原则以不同的形式适用于所有关系。例如,在相反的情况下hasManybelongsTo您需要选择外键(例如user_id)。