问题来了:我不能访问用户对象中的条目属性,它们以一个Eloquent关系连接(一个用户可以有多个条目),但是我将foreignId列命名为customer_id,而不是user_id默认,因为引用表是用户。当我试图访问项目属性在刀片,这里是错误显示:
SQLSTATE[42S22]: Column not found: 1054 Unknown Column 'items.日志含义User_id ' in 'where子句'
select * fromitems
whereitems
。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);
?>
错误实际上是在您的hasMany
关系中,因为user_id
不存在于items
迁移中。
您需要在这里定义外键(就像您在Item模型中所做的那样),因为它看起来最有可能是customer_id
。
错误从刀片代码触发:session('user')->items;
——只要items
被访问。