【问题标题】:Laravel Eager Loading - load() return nullLaravel 急切加载 - load() 返回 null
【发布时间】:2020-09-12 15:04:33
【问题描述】:

拜托,我有与模型角色有关系的模型用户

users
    id - integer
    name - string
    email - string


roles
    id - integer
    name - string
    description - string

我想从类角色中返回用户只是一些列 - 只是 id 和 name-

我的代码是这样的:

$user = User::whereHas('role', function (Builder $query) {
                return $query->where('name', 'admin');
            })
                ->select(['id', 'email'])
                ->get();

        } 

$user->load('role:id,name');


return $user;

我尝试使用 with(['role:id,name']) 方法我遇到了同样的问题。

我得到结果

{"id":1,"email":"admin@gmail.com","role":null}

提前致谢

【问题讨论】:

  • 缺少用户和角色之间的数据透视表 - 如果您也共享您的关系模型,那就太好了。

标签: laravel eloquent laravel-relations


【解决方案1】:

首先检查 Laravel Eloquent Relationship documention 并尝试以下操作: 在您的 User 模型中确保有 一对多 关系

对于急切加载使用:

$user = User::with(['role' => function($q){
    $q->where('name','admin')
      ->select(['id', 'name']);
}])
->select(['name','email'])
->get();

对于延迟加载使用:

$users = App\User::whereHas('role',function(Builder $q){ 
    $q->where('name','admin'); 
})->get();



$user->load(['role' => function ($q) {
    ->addSelect(['id','name']);
}]);

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 2021-04-23
    • 2018-10-15
    • 1970-01-01
    相关资源
    最近更新 更多