从第一个表中选择特定列,并在laravel中进行即时加载

ecfdbz9o  于 2021-10-10  发布在  Java
关注(0)|答案(2)|浏览(271)

我已经检查了许多解决方案,以从第一个模型中获得特定的列,并进行了急切的加载,但在我的情况下没有任何效果。
例如:我想要模型中的特定列 User 并希望在没有任何联接的情况下通过即时加载获取关系数据。

$users= User::select('name') // get one column from user table
->with(array('role_user' => function($query){
    $query->select('role_name'); // and select one column from pivot table
}))
->paginate(3);

当我不使用 User::select('name) ,当我使用select时,它返回带有渴望加载的关系数据,它返回空数组。
如何使用即时加载从两个表中获取特定列

flmtquvp

flmtquvp1#

我不太清楚,你是如何定义你的关系的,但是laravel有一些奇怪的行为:你应该总是选择主键和外键:

$users= User::select(['id', 'name']) // get one column from user table
->with(array('role_user' => function($query){
    $query->select(['id', 'role_name']); // and select one column from pivot table
}))
->paginate(3);

您可以将其简化为:

$users= User::select(['id', 'name']) // get one column from user table
->with(['role_user:id,user_id,role_name']) // and select one column from pivot table
->paginate(3);
nsc4cvqm

nsc4cvqm2#

我们永远不知道您的项目的模式和关系。。但我想这应该行得通

$users = User::select('id','name') 
               ->with(['role_user:id,user_id,role_name'])
               ->paginate(3);

在用户模型中,关系必须是

public function role_user(){
return $this->belongsToMany(Role::class, 'role_user'); // pivot table name
}

以你的榜样

public function users(){
return $this->belongsToMany(User::class, 'role_user'); // pivot table name
}

相关问题