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

如何在SpladeTable中获取关联Expiry表的expires_at列数据?

解决SpladeTable关联Expiry表数据为空的问题

1. 确保Item与Expiry模型的关联正确

先检查Item模型是否定义了正确的关联关系。假设Expiry表通过item_id外键关联Item表(一对一关系,一个商品对应一条过期记录),在app/Models/Item.php中添加关联方法:

public function expiry()
{
    return $this->hasOne(Expiry::class);
}

如果是一对多关系(一个商品有多批次过期记录),替换为hasMany即可。

2. 预加载关联数据

SpladeTable需要预加载关联模型才能获取数据,否则会出现关联字段为空的情况。修改你的控制器代码:

public function index()
{
    return view('items', [
        'items' => SpladeTable::for(Item::class)
            ->with('expiry') // 预加载关联的expiry数据
            ->column('id', 'ID', true)
            ->column('barcode', 'Barcode', true)
            ->column('article_name', 'Article Name', true)
            // 用「关联名.字段名」的方式引用关联表字段
            ->column('expiry.expires_at', 'Expires At', true)
            ->searchInput('article_name', 'Type in article name')
            ->searchInput('barcode', 'Use the scanner')
            ->searchInput('sifra', 'Type in article number')
            // 按关联字段设置默认排序
            ->defaultSort('expiry.expires_at')
            ->paginate(20),
    ]);
}

3. 处理关联字段排序报错(可选)

如果直接用expiry.expires_at排序出现SQL错误,可改用表关联查询的方式:

public function index()
{
    return view('items', [
        'items' => SpladeTable::for(
            Item::query()->join('expiries', 'items.id', '=', 'expiries.item_id')
        )
            ->select('items.*', 'expiries.expires_at')
            ->column('id', 'ID', true)
            ->column('barcode', 'Barcode', true)
            ->column('article_name', 'Article Name', true)
            ->column('expires_at', 'Expires At', true)
            ->searchInput('article_name', 'Type in article name')
            ->searchInput('barcode', 'Use the scanner')
            ->searchInput('sifra', 'Type in article number')
            ->defaultSort('expires_at')
            ->paginate(20),
    ]);
}

4. 验证关联数据是否正常加载

如果问题仍存在,可先在控制器中打印测试数据,确认关联是否生效:

$testItems = Item::with('expiry')->take(5)->get();
dd($testItems->toArray());

查看输出结果中是否包含expiry字段及对应的expires_at值,以此排查是关联配置问题还是SpladeTable的显示问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:34:58