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

如何关联Downloads、Products、Users表并在视图展示数据?

解决方案

1. 给Downloads模型添加关联关系

在Downloads模型中定义与User和Product的关联:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Downloads extends Model
{
    // 关联下载记录所属用户
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    // 关联下载记录对应的产品
    public function product()
    {
        return $this->belongsTo(Product::class);
    }
}

2. 控制器中预加载关联数据

修改控制器的index方法,使用with()预加载关联模型,避免多次查询数据库的性能问题:

public function index() {
    return view('nav/index', [
        'trendings' => Template::orderBy('views', 'DESC')->where('is_active', 'yes')->take(8)->get(),
        'latests_downloads' => Downloads::orderBy('id', 'DESC')
            ->with(['user', 'product']) // 一次性加载关联的用户和产品数据
            ->take(8)
            ->get(),
    ]);
}

3. 调整视图展示代码

现在每条下载记录实例都包含了关联的user和product对象,直接在循环中调用属性即可:

@foreach ($latests_downloads as $download)
    <div class="product_title"> {{ $download->product->name }} </div>
    <div class="who_downloaded"> {{ $download->user->name }} </div>
@endforeach

补充提示

如果存在用户或产品被删除的情况,可以给关联添加withDefault()避免页面报错:

public function user()
{
    return $this->belongsTo(User::class)->withDefault(['name' => '匿名用户']);
}

public function product()
{
    return $this->belongsTo(Product::class)->withDefault(['name' => '已下架产品']);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:05:22