【发布时间】:2020-06-01 16:33:04
【问题描述】:
我看到了大量相关问题,但似乎无法弄清楚发生了什么。 我正在使用 Laravel 7.x,我有一个 Categories 和一个 Products 表。
分类:
CREATE TABLE categories (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT '',
PRIMARY KEY (`id`)
)
产品:
CREATE TABLE products (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT '',
category_id int(11) unsigned DEFAULT NULL,
PRIMARY KEY (id),
KEY category_id (category_id),
CONSTRAINT products_ibfk_1 FOREIGN KEY (category_id) REFERENCES categories (id) ON DELETE CASCADE ON UPDATE CASCADE
)
在 Laravel 中,我可以使用 Product::first()->catgory 然后获取相关类别,而 hasMany 关系似乎是梨形的。
这样定义类别:
public function products()
{
return $this->hasMany(Product::class);
}
给出错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'categories.category_id' in 'where clause' (SQL: select * from categories where categories.category_id = 1 and categories.category_id is not null)
添加外键和本地键只返回一个空数组:
Category::find(1)->products;
...
public function products()
{
return $this->hasMany(Product::class, 'id', 'category_id');
}
...
Illuminate\Database\Eloquent\Collection {#306 ▼
#items: []
}
我在这里缺少什么?
*编辑: 如上所述添加 FK 仍然会导致上述 SQL 错误
class Category extends Model
{
public function products()
{
return $this->hasMany(Product::class, 'category_id');
}
}
尝试过...
class Category extends Model
{
public function products()
{
return $this->hasMany(Product::class, 'category_id', 'id');
}
}
【问题讨论】:
-
只是在您的类别模型中包含
return $this->hasMany(Product::class);给您一个错误? -
只为两个模型添加外键。产品和类别返回 $this->hasMany(Product::class, 'category_id');和.......返回 $this->belongsTo(Category::class, 'category_id');
-
@Digvijay 是的,它给出了上面的 sql 错误
-
@nikitag 仅使用 FK 会导致相同的 SQL 错误:
return $this->hasMany(Product::class, 'category_id'); -
我从头开始,现在一切正常 - 一定是拼写错误或数据库错误。感谢您的帮助