You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel8 Eloquent查询添加子查询字段获取关联表图片列表

解决方案

你原来的leftJoin写法会产生笛卡尔积,每个匹配的图片都会对应一条用户记录,无法直接聚合为数组格式,按照下面步骤修改即可:

步骤1:定义User模型的关联关系

在app/Models/User.php中添加一对多关联方法,关联Images表:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    // 原有其他配置、方法...

    public function images()
    {
        return $this->hasMany(Image::class, 'id_user', 'id');
    }
}

注意:提前确保你已经创建了Image模型对应Images表,如果还没创建可以先执行php artisan make:model Image生成。

步骤2:修改控制器查询代码

用Eloquent的预加载with()方法加载关联数据,避免N+1查询问题:

public function index(Request $request)
{
    $users = User::where('active', 1)
        ->with('images')
        ->paginate(10);
    return UserResource::collection($users);
}

步骤3:调整UserResource返回格式

在app/Http/Resources/UserResource.php中处理images字段,提取所有图片路径为数组:

public function toArray($request)
{
    return [
        'id' => $this->id,
        'name' => $this->name,
        'images' => $this->images->pluck('image')->toArray()
    ];
}

方案说明

Eloquent的关联预加载会先查询所有符合条件的用户,再批量查询对应用户的所有图片,最后自动把图片数据挂载到对应用户的images属性上,只需要在资源层做简单的字段提取就能得到你要求的返回结构。

内容的提问来源于stack exchange,提问作者Ezequiel Tavares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:57:00