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

Eloquent关联中外键非默认值时无法访问关联表问题

问题

在Laravel的Eloquent中配置了User与Item的一对多关联,但将Item表的外键设为customer_id而非默认的user_id。尝试在Blade模板中访问User对象的items属性时,出现SQL错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'items.user_id' in 'where clause'

生成的SQL语句仍在查找默认的user_id字段,相关代码如下:

Item.php

public function customer(){
    return $this->belongsTo(User::class,'customer_id');
}

User.php

public function items(){
    return $this->hasMany(Item::class);
}
public function get_user($user_name){
    return User::where("user_name",$user_name)->first();
}

Item表迁移文件

public function up()
{
    Schema::create('items', function (Blueprint $table) {
        $table->id();
        $table->foreignId('wine_id')->constrained();
        $table->foreignId('customer_id')->constrained('users');
        $table->integer('quantity');
        $table->timestamps();
    });
}

UserController.php

// ...
$user = $user_model->get_user($request->user_name);
$request->session()->put("user",$user);
// ...

Blade模板

<?php
   $items = session('user')->items;
   $empty_cart = true;
   foreach($items as $item){
   if($wine->id==$item->customer_id){
       $empty_cart = false;
       return;
   }
 }
  var_dump($empty_cart);
?>
解决方案

问题出在User模型的items关联方法里,Eloquent默认会使用关联模型名加_id作为外键(也就是user_id),你没有指定自定义的外键字段,所以需要在hasMany方法里明确指定外键为customer_id:

修改User.php中的items方法:

public function items(){
    return $this->hasMany(Item::class, 'customer_id');
}

另外,Blade模板里的判断逻辑存在错误:$wine->id==$item->customer_id中,customer_id是User的ID,并非Wine的ID,应该改为判断$wine->id == $item->wine_id;同时return会直接终止整个循环,导致后续项无法被检查,建议换成break:

修改Blade模板代码:

<?php
   $items = session('user')->items;
   $empty_cart = true;
   foreach($items as $item){
       if($wine->id == $item->wine_id){
           $empty_cart = false;
           break;
       }
   }
   var_dump($empty_cart);
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:40:57