【问题标题】:Unable to fetch data from Laravel eloquent relationships array无法从 Laravel eloquent 关系数组中获取数据
【发布时间】:2021-12-07 00:34:42
【问题描述】:

对于$response,我有一个如下所示的数组。我想单独获取user 字段和位于user 内的files 字段。我试过$response['user'] & $response['user']['files'],它显示错误undefined index。我怎样才能做到这一点?

[
    {
        "id": 14,
        "userId": 1,
        "courseDisplayName": "yuu",
        "aboutCourse": "kljkl",
        "user": {
            "id": 1,
            "name": "admin",
            "profilePicId": 93,
            "aboutUser": null,
            "files": {
                "id": 93,
                "FilePath": "contentq/contentqFiles/XwyC6JHK5T/Account.png"
            }
        },
        "files": null
    }
]

我在这里尝试做的是,输入couresId 是类似[14,15] 的数组,所以对于数组中的每个项目,我想从Course、user 和files 表中获取数据,其中Course 表的id 具有输入中的值,course 表的userId 具有user 表中的id 值和course 表的fileId 具有files 表中 id 的值。属性user & files 在Course 模型中定义。

$response=null;
foreach($request->courseId as $key => $row){
$response[] = Course::with([
        'user' => function($q)
         {
              $q->with('files:id,FilePath')->select('id', 'name' , 'profilePicId','aboutUser');
         },'files:id,FilePath']) 
            ->where('id',$row)
           ->get()
     ->makeHidden(['subjectId','skillId','courseUniqueName','active','created_at','updated_at','deleted_at','publish','course_patterns_id','paid_status','fileId','updatedBy']);
  }

**EDIT**

//$res=[];
 foreach($response as $row){
            
  $res['user'] = $row->user;  // error- Property [user] does not exist on this collection instance  
  $res['user'] = $row->first()->user;// works , but it will show only 1 set of data. i wanted all sets of data.   
} 

【问题讨论】:

  • 不清楚您的 Course 和 User 模型是什么样的,也许您可​​以更新您的帖子以包含 Course.php 模型和 User.php ?此外,也许您可​​以使用范围,而不是对用户使用这样的子查询? laravel.com/docs/8.x/eloquent#query-scopes
  • $response 是一个数组或数组的集合。你不能访问 $response['user'] 而不循环它。要么调用 $response->first() 要么做一个 foreach 循环遍历 $response。
  • @Psycho 查看我更新的问题正文。我添加了一个 forech 循环,但它仍然显示未定义的索引
  • $res 是一个对象。试试$res->user@user17189691
  • 并删除$res = [];这行你不需要初始化它

标签: php laravel eloquent laravel-8 eloquent-relationship


【解决方案1】:

$response 是一个数组或数组的集合。你不能访问 $response['user'] 而不循环它。要么调用 $response->first() 要么做一个 foreach 循环遍历 $response

方式一:

    $user = $response->first()->user;
    $files = $response->first()->files;

方式二:

    foreach($response as $row){
        $user = $row->user;
        $files = $row->files;
       // use dd() these to see what you get
    }

【讨论】:

  • 我使用了第二种方法。如果我正在寻找$response,这将有效。但是,这个$response 只包含一组数据。只有当我为$response 添加[] 时,它才会存储所有数据集。然后它显示错误Property [user] does not exist on this collection instance.i 已经用我现在的代码更新了问题正文
  • 好的,使用你当前的代码,你需要$res = [];这一行,所以取消注释它。或者你可以这样做 $user = []; 并在循环内 $user = $row->user
  • 查看更新的我的问题正文
  • 我已经取消注释$res = [];,结果还是一样
  • 用户是 hasMany 关系还是属于关系?请分享用户和课程模型
猜你喜欢
  • 2021-12-10
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2017-05-01
相关资源
最近更新 更多