未找到列:1054 'field list' laravel eloquent 中的未知列 'taggables.tags_model_id'
Column not found: 1054 Unknown column 'taggables.tags_model_id' in 'field list' laravel eloquent
我将实施一个查询来检索我的所有博客及其标签。我正在使用 Laravel Eloquent 多态关系,但出现 Column not found: 1054 Unknown column 'taggables.tags_model_id' in 'field list'
错误。 laravel 和我的 SQL 中的所有代码如下所示:
我的表:
create table tags
(
id int auto_increment
primary key,
name varchar(200) null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null
);
create table taggables
(
id int auto_increment
primary key,
tag_id int null,
taggable_type varchar(512) null,
taggable_id int null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null,
constraint fk23
foreign key (tag_id) references tags (id)
on update cascade on delete cascade
);
create index taggables_tag_id_index
on taggables (tag_id);
create table blog
(
id int auto_increment
primary key,
title varchar(200) null,
passage text null,
author varchar(200) null,
category varchar(200) null,
img_url varchar(200) null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null,
user_id int not null,
category_id int null,
constraint fk18
foreign key (user_id) references users (id)
on update cascade on delete cascade,
constraint fk19
foreign key (category_id) references blog (id)
on update cascade on delete cascade
);
create index blog_index
on blog (category_id);
create index blog_users_index
on blog (user_id);
Eloquent 模特
class BaseModel extends Model
{
protected $table;
protected $primaryKey;
use SoftDeletes;
}
class BlogModel extends BaseModel
{
protected $table = 'blog';
protected $primaryKey = 'id';
public function tags()
{
return $this->morphToMany(TagsModel::class,"taggable");
}
}
class TagsModel extends BaseModel
{
protected $table = 'tags';
protected $primaryKey = 'id';
public function blog()
{
return $this->morphedByMany(BlogModel::class,"taggable");
}
}
当我调用这个查询时,结果是一个空数组
public function getItemsWithTags(array $attr)
{
return BlogModel::find(1)->tags;
}
非常感谢。
您不能像 BaseModel 那样进行中级育儿 class。因为它在 Laravel 和 属性 $table 中不起作用,请尝试这样做:
class BlogModel extends Model
{
use SoftDeletes;
protected $table = 'blog';
protected $primaryKey = 'id';
public function tags()
{
return $this->morphToMany(TagsModel::class,"taggable");
}
}
class TagsModel extends Model
{
use SoftDeletes;
protected $table = 'tags';
protected $primaryKey = 'id';
public function blog()
{
return $this->morphedByMany(BlogModel::class,"taggable");
}
}
试试这个例子,你需要在你的eloquent方法中引用'tags'。
BlogModel::with('tags')->find(1);
Laravel 的多态关系默认使用反射来确定键列的名称。因为您的模型名为 TagModel
,Laravel 假定外键为 tag_model_id
。
// Illuminate\Database\Eloquent\Model
public function getForeignKey()
{
return Str::snake(class_basename($this)).'_'.$this->getKeyName();
}
您可以通过将正确的外键显式传递给 morphedByMany
方法来解决此问题:
public function tags()
{
return $this->morphedByMany(TagsModel::class, 'taggable', null, 'tag_id');
}
我将实施一个查询来检索我的所有博客及其标签。我正在使用 Laravel Eloquent 多态关系,但出现 Column not found: 1054 Unknown column 'taggables.tags_model_id' in 'field list'
错误。 laravel 和我的 SQL 中的所有代码如下所示:
我的表:
create table tags
(
id int auto_increment
primary key,
name varchar(200) null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null
);
create table taggables
(
id int auto_increment
primary key,
tag_id int null,
taggable_type varchar(512) null,
taggable_id int null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null,
constraint fk23
foreign key (tag_id) references tags (id)
on update cascade on delete cascade
);
create index taggables_tag_id_index
on taggables (tag_id);
create table blog
(
id int auto_increment
primary key,
title varchar(200) null,
passage text null,
author varchar(200) null,
category varchar(200) null,
img_url varchar(200) null,
created_at timestamp default CURRENT_TIMESTAMP not null,
updated_at timestamp null,
deleted_at timestamp null,
user_id int not null,
category_id int null,
constraint fk18
foreign key (user_id) references users (id)
on update cascade on delete cascade,
constraint fk19
foreign key (category_id) references blog (id)
on update cascade on delete cascade
);
create index blog_index
on blog (category_id);
create index blog_users_index
on blog (user_id);
Eloquent 模特
class BaseModel extends Model
{
protected $table;
protected $primaryKey;
use SoftDeletes;
}
class BlogModel extends BaseModel
{
protected $table = 'blog';
protected $primaryKey = 'id';
public function tags()
{
return $this->morphToMany(TagsModel::class,"taggable");
}
}
class TagsModel extends BaseModel
{
protected $table = 'tags';
protected $primaryKey = 'id';
public function blog()
{
return $this->morphedByMany(BlogModel::class,"taggable");
}
}
当我调用这个查询时,结果是一个空数组
public function getItemsWithTags(array $attr)
{
return BlogModel::find(1)->tags;
}
非常感谢。
您不能像 BaseModel 那样进行中级育儿 class。因为它在 Laravel 和 属性 $table 中不起作用,请尝试这样做:
class BlogModel extends Model
{
use SoftDeletes;
protected $table = 'blog';
protected $primaryKey = 'id';
public function tags()
{
return $this->morphToMany(TagsModel::class,"taggable");
}
}
class TagsModel extends Model
{
use SoftDeletes;
protected $table = 'tags';
protected $primaryKey = 'id';
public function blog()
{
return $this->morphedByMany(BlogModel::class,"taggable");
}
}
试试这个例子,你需要在你的eloquent方法中引用'tags'。
BlogModel::with('tags')->find(1);
Laravel 的多态关系默认使用反射来确定键列的名称。因为您的模型名为 TagModel
,Laravel 假定外键为 tag_model_id
。
// Illuminate\Database\Eloquent\Model
public function getForeignKey()
{
return Str::snake(class_basename($this)).'_'.$this->getKeyName();
}
您可以通过将正确的外键显式传递给 morphedByMany
方法来解决此问题:
public function tags()
{
return $this->morphedByMany(TagsModel::class, 'taggable', null, 'tag_id');
}