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

Laravel多对多表关联查询:用户与请求表关联实现方案

当然可以关联这些表查询数据!

你的思路完全正确——利用req_user中间表来关联Users和reqs这两张处于多对多关系的表,是这类场景下的标准做法。先给你拆解一下你这段代码的作用:

$u_id = $request->user_name; 
$start_date = $request->get('start_date'); 
$end_date = $request->get('end_date'); 

$req = DB::table('reqs') 
    ->join('req_user', 'reqs.req_id', "=", 'req_user.req_id') 
    ->whereBetween('date_applied', [$start_date, $end_date]) 
    ->where('user_id', $u_id) 
    ->pluck('req_id');

这段代码通过join将reqs和req_user表关联起来,筛选出指定日期范围内、属于目标用户的所有请求ID,最终用pluck('req_id')提取出这些ID的列表,逻辑是通顺的。

不过这里有个小细节需要注意:你把$request->user_name赋值给了$u_id,但Users表的主键是id,req_user表的user_id关联的也是这个id。如果user_name是用户名(字符串类型),直接用它作为user_id查询会导致匹配错误。你可以先通过用户名拿到用户ID:

$user = \App\Models\User::where('name', $request->user_name)->first();
if (!$user) {
    // 处理用户不存在的情况
    return response()->json(['message' => '用户不存在'], 404);
}
$u_id = $user->id;

另外,如果你用的是Laravel的Eloquent模型,还可以通过定义关联关系让代码更简洁易读。比如在User模型中定义和Req模型的多对多关联:

// app/Models/User.php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;

class User extends Model
{
    public function reqs(): BelongsToMany
    {
        return $this->belongsToMany(Req::class, 'req_user', 'user_id', 'req_id');
    }
}

然后查询就可以简化成:

$user = \App\Models\User::where('name', $request->user_name)->first();
if ($user) {
    $reqs = $user->reqs()
        ->whereBetween('date_applied', [$start_date, $end_date])
        ->get(); // 这里会返回完整的Req模型实例集合,而不只是ID
}

这样不仅代码更优雅,还能直接获取请求的完整信息,方便后续使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:05:17