Я собираюсь сохранить сообщение с некоторыми тегами внутри моих таблиц, но я не могу сохранить список тегов, связанных с этим новым сообщением. У меня есть таблица Blog, Tag, Taggable, представленная ниже.
-- auto-generated definition
create table blog
(
id int auto_increment
primary key,
title varchar(200) null,
content 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);
-- auto-generated definition
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
);
-- auto-generated definition
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);
и это мои красноречивые модели для этих таблиц:
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->morphedByMany(TagsModel::class,'taggable', null, 'tag_id');
}
}
class TagsModel extends BaseModel
{
protected $table = 'tags';
protected $primaryKey = 'id';
public function blog()
{
return $this->morphedByMany(BlogModel::class,"taggable");
}
}
save()
для сохранения сообщения с его тегами в базе данных:
public function save($model, $title, $passage, $author, $category, $category_id, $img_url, $tag, $user_id)
{
$model->title = $title;
$model->content = $passage;
$model->author = $author;
$model->category = $category;
$model->category_id = $category_id;
$model->img_url = $img_url;
$model->user_id = $user_id;
$model->save();
return $model->tags()->saveMany($tag);
}
Здесь я создаю список тегов, например ['tag1','tag2','tag3']
и передаю его методу save()
, который представлен выше:
private function tags($tags)
{
$tag = array();
foreach ($tags as $t)
array_push($tag,['name' => $t]);
return $tag;
}
Наконец, ошибка
Argument 1 passed to Illuminate\Database\Eloquent\Relations\BelongsToMany::save() must be an instance of Illuminate\Database\Eloquent\Model, array given, called in /var/www/test/vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php on line 946 and defined in /var/www/test/vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php on line 927