laravel 当foreignId与默认值不同时,无法访问Eloquent中的连接表

bgibtngc  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(109)

问题是:我无法访问用户对象中的items属性,它们以Eloquent关系连接(一个用户可以拥有多个项目),但我将foreignId列命名为customer_id,而不是user_id,因为引用的表默认为users。当我尝试访问刀片中的items属性时,显示屏上出现以下错误:
状态[42 S22]:未找到列:1054“where子句”中的未知数据行“items.user_id”
items中选择 *,其中items. user_id = 3且items. user_id不为空
因此,它显然会搜索默认的foreignId列,而不是我为该关系定义的foreignId列。

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();
    }

Migration for items table:

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);
  ?>
6l7fqoea

6l7fqoea1#

错误实际上存在于hasMany关系中,因为user_id不存在于items迁移中。
您需要在这里定义外键(就像您在Item模型中所做的那样),因为它看起来最有可能是customer_id
此错误是从以下位置的刀片式服务器代码触发的:session('user')->items;--一旦访问了items

相关问题