Я пытаюсь настроить laravel-tagging, который, кажется, является самой популярной системой тегов для Laravel там. Но, к сожалению, в нем нет никаких интерфейсных функций. Существует руководство. за это я тщательно выполнил. В конце концов, я столкнулся с ошибкой при попытке создать тег:
SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец taggable_id не может быть пустым (SQL: вставить в значения
tagging_tagged
(tag_name
,tag_slug
,taggable_type
,taggable_id
) (сыр, сыр, приложение \ ссылки,))
Я нашел несколько других сообщений, в которых люди сталкивались с похожими ошибками, например this, this и this. Но ни один из них не дает окончательного решения. Люди и здравый смысл говорят, что модель, содержащая taggable_id
, должна быть сохранена, чтобы тег сохранялся в базе данных. Мой код контроллера выглядит так:
public function storeStuff(Request $request)
{
// Create the link first
$link = new Links;
// Now add tags
$link->tag(explode(',', $request->tags));
// Try to save tags?
$link->save();
}
Моя попытка сохранить его с помощью $link->save();
в моем случае не работает. Я по-прежнему получаю ту же ошибку, и моя таблица базы данных tagging_tagged
, содержащая столбец taggable_id
, все еще заполнена нулями. Есть ли у кого-нибудь советы, как подойти к этой проблеме?
РЕДАКТИРОВАТЬ: Я заставил его работать, добавив еще одно сохранение, как предложил Тобиас Карлссон:
$link = new Links;
$link->tag_name = $request->tags;
$link->save();
// Now add tags
$link->tag(explode(',', $request->tags));
$link->save();
Мне также пришлось добавить отметки времени, чтобы исправить отсутствующую ошибку created_at
. Отметки времени не включены в начальную миграцию, которая идет с пакетом laravel-tagging, хотя я не уверен, полезны ли они для тегов. Моя tagging_tagged
таблица теперь выглядит так:
FIELD TYPE NULL KEY
id int(10)unsigned NO PRI auto_increment
taggable_id int(10)unsigned NO MUL
taggable_type varchar(255) NO MUL
tag_name varchar(255) NO
tag_slug varchar(255) NO MUL
created_at timestamp YES
updated_at timestamp YES
Я все еще пытаюсь заставить Javascript автоматически заполнять теги. Я обновлю этот вопрос, когда все заработает.