Squeak.ru - шаблоны программирования

Нарушение ограничения целостности: 1048 Столбец taggable_id не может быть пустым

Я пытаюсь настроить 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 автоматически заполнять теги. Я обновлю этот вопрос, когда все заработает.

10.05.2016

  • Я думаю, что taggable_id - это внешний ключ, и вы не можете ввести для него данные NULL. Итак, либо удалите ограничение, либо добавьте значение для этого столбца. 10.05.2016
  • taggable_id первичный ключ? Можете ли вы вставить вывод следующего SQL-запроса: DESCRIBE tagging_tagged 10.05.2016
  • Обычно вы пытаетесь пометить ресурс, на котором еще нет id. Вы должны сначала сохранить его, чтобы получить идентификатор, а затем попробуйте добавить теги. 10.05.2016

Ответы:


1

Вам нужно сначала сохранить модель, а затем установить теги, а затем снова сохранить.

$link = new Links;
$link->someProperty = $request->someProperty;

// Save model to get a taggable_id (model id).
$link->save();

// Now add tags
$link->tag(explode(',', $request->tags));

// Save tags.
$link->save();
10.05.2016

2

вам нужно установить DEFAULT NULL для taggable_id в структуре таблицы, иначе вам нужно добавить NULL в запрос, подобный этому.

insert into tagging_tagged (tag_name, tag_slug, taggable_type, taggable_id) values (Cheese, cheese, App\Links, NULL)
10.05.2016

3

Это может произойти с опозданием, но должно быть полезно для других, пытающихся внедрить теги в свою работу. Если вы уже поняли теги Laravel, тогда вы можете увидеть пробел в их объяснении и то, как они усложнили понимание их пакета непрофессионалам вроде меня. Взяв образец Тобиаса Карлссона (см. Выше) и модифицируя его.

$link = new Links;

//you shouldn't add any tag property in the line below
$link->someProperties = $request->someProperties;

//save model to get taggable_id (model_id)
$link->save();

//now add tags
$link->attachTags(['tag1','tag2','tag3']);
$link->save();
13.01.2020
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...