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



问题来了:我不能访问用户对象中的条目属性,它们以一个Eloquent关系连接(一个用户可以有多个条目),但是我将foreignId列命名为customer_id,而不是user_id默认,因为引用表是用户。当我试图访问项目属性在刀片,这里是错误显示:

SQLSTATE[42S22]: Column not found: 1054 Unknown Column 'items.日志含义User_id ' in 'where子句'

select * fromitemswhereitemsuser_id= 3和itemsuser_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);
?>

错误实际上是在您的hasMany关系中,因为user_id不存在于items迁移中。

您需要在这里定义外键(就像您在Item模型中所做的那样),因为它看起来最有可能是customer_id

错误从刀片代码触发:session('user')->items;——只要items被访问。

相关内容

  • 没有找到相关文章

最新更新