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

如何使用Laravel模型与集合实现数据表关联查询?

使用Laravel模型与集合实现关联查询

1. 给模型添加关联关系

先在两个模型中定义彼此的关联,让Eloquent自动处理表之间的关联逻辑:

修改Tasks模型

class tasks extends Model
{
    protected $table = 'tasks';
    protected $connection = 'mysql';

    // 每个任务属于一个资源,关联字段为resourceId
    public function resource()
    {
        return $this->belongsTo(resources::class, 'resourceId', 'resourceId');
    }
}

修改Resources模型(可选,用于反向关联查询)

class resources extends Model
{
    protected $table = 'resources';
    protected $connection = 'mysql';

    // 一个资源可对应多个任务
    public function tasks()
    {
        return $this->hasMany(tasks::class, 'resourceId', 'resourceId');
    }
}

2. 控制器中实现查询

有两种常用方式可以实现你要的查询效果:

方式一:使用Eloquent关联预加载(推荐)

这种方式符合Laravel ORM设计思路,通过预加载关联避免N+1查询问题:

// 在控制器方法中
$tasks = tasks::with('resource')
    ->select('taskName', 'resourceId') // 仅选择tasks表中需要的字段
    ->get();

// 遍历输出目标格式
foreach ($tasks as $task) {
    echo "{$task->taskName},{$task->resource->resourceId},{$task->resource->name}\n";
}

方式二:使用查询构造器的JOIN语法

这种方式更接近原生SQL写法,直接合并两张表查询:

// 在控制器方法中
$results = tasks::join('resources', 'tasks.resourceId', '=', 'resources.resourceId')
    ->select('tasks.taskName', 'resources.resourceId', 'resources.name')
    ->get();

// 遍历输出结果
foreach ($results as $item) {
    echo "{$item->taskName},{$item->resourceId},{$item->name}\n";
}

额外提示

Laravel模型类名通常遵循首字母大写、单数形式的规范,比如将tasks模型改为Task(文件名Task.php),resources改为Resource(文件名Resource.php),同时保持$table属性为对应的表名(tasks/resources),这样更符合框架约定,代码可读性更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:46:05