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

Laravel配置apiResource路由调用接口提示Unknown column 'id'报错问题

报错原因

  • 控制器show方法的Postmeta $sku形参触发了Laravel隐式路由模型绑定:Laravel会默认使用模型对应表的主键id作为查询字段,匹配路由传递的sku参数值,自动查询wp_postmeta表,这一步查询在你自定义的SQL执行前就会触发,就是报错中出现的SQL语句来源。
  • 你的wp_postmeta表不存在id字段,且你的业务逻辑本身是要将sku参数作为meta_value的值做关联查询,不需要Laravel自动执行模型查询。

解决方法

提供两种可选方案,按需选择即可:

方案1:直接接收路由参数(推荐,适配现有逻辑)

去掉show方法形参的Postmeta类型提示,直接接收字符串类型的sku参数,不会触发自动模型查询:

public function show(string $sku)
{
    $sql = "select * from wp_posts po
    join wp_postmeta wp on wp.post_id = po.ID and wp.meta_key = '_sku'
    where po.post_type = 'product' and wp.meta_value = ?";

    $prod = DB::select($sql, array($sku));

    return response(['product' => CEOResource::collection($prod),
        'message' => 'Retrived Successfully'], 200);
}

方案2:自定义路由模型绑定规则(需要用到Postmeta模型实例时使用)

如果你后续需要用到查询出来的Postmeta模型实例,可以修改绑定规则:

  1. 若Postmeta模型对应表的主键不是id,先在模型文件中指定实际主键:
// app/Models/Postmeta.php
protected $primaryKey = 'meta_id'; // 替换为wp_postmeta表实际的主键字段名
  1. 在app/Providers/RouteServiceProvider.php的boot方法中添加自定义绑定逻辑,指定按meta_value字段匹配sku参数:
public function boot()
{
    parent::boot();

    Route::bind('sku', function (string $value) {
        return Postmeta::where('meta_value', $value)->firstOrFail();
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:30:03