voskobovich/yii2-linker-behavior

Тэги к моделям. Как?

Closed this issue · 11 comments

Немного поработал с компонентом, но не смог реализовать логику обычных тэгов, т.е. не только запись связей в промежуточную таблицу, но и запись самих тэгов в БД.

Имею три стандартных таблицы post, post_tag, tag. И две модели Post, Tag.
Связи записываются и читаются, дополнительные данные (типа created_at) тоже могут быть записаны в промежуточную таблицу, но вот записать тэг из модели Post не смог.

Какая должна быть логика работы?

@moneyadmin на основе моего поведения это делать не рационально.
Оно создано не для тегов, а, в первую очередь, для связи уже существующих моделей через форму или API.

Для тегов есть отличные поведения у 2amigos - yii2-taggable-behavior.
Так же у creocoder - yii2-taggable.
Ну и еще десяток вариантов на первой старнице гугла :)

Для тэгов да, есть решения, но у них другая крайность - они оперируют чисто тэгами (текстами) и совершенно игнорируют id.

Понятно. Буду думать как решать свою задачу.

Жаль нельзя навесить обработчик, который будет не только в связывающую таблицу что-то писать, но и в "связанную".

@moneyadmin я думал тебе нужно решить задачу с тегами и предложил ваниаты. Я еще не встречал задачи под который не было готовых решений.
Опиши свой кейс.

У меня не тэги в их обычном понимании. Они, наверно, больше похожи на то, как сделаны имена во всяких соцсетях, когда ты указываешь имя в тексте сообщения. В дальнейшем имя может измениться, но т.к. указан идентификатор, то имя в текстах тоже измениться. Но в моем случае нет готовой базы имен, они могут создаваться на лету из текста.
Поэтому по моей задаче мне надо для моих "тэгов", при отсутствии id, создавать новые записи в условной базе tag, а если id есть, то только следить чтобы была связь.

А вообще вопрос. Почему есть функционал добавления допинфы к связывающей таблице, но нет функционала добавления инфы к "удаленной" таблице? Это вроде как должно быть более востребовано. Самых яркий пример - у категорий/авторов обновить количество привязанных материалов, чтобы не дергать лишний раз связывающую таблицу.

У меня не тэги в их обычном понимании. Они, наверно, больше похожи на то, как сделаны имена во всяких соцсетях, когда ты указываешь имя в тексте сообщения. В дальнейшем имя может измениться, но т.к. указан идентификатор, то имя в текстах тоже измениться. Но в моем случае нет готовой базы имен, они могут создаваться на лету из текста.
Поэтому по моей задаче мне надо для моих "тэгов", при отсутствии id, создавать новые записи в условной базе tag, а если id есть, то только следить чтобы была связь.

я не до конца понял твою задачу. Так что не смогу тебе подсказать как ее решить.

А сделать функционал типа имеющегося viaTableAttributesValue, но для "удаленной" таблицы (модели) не входит в планы?
В принципе, достаточно же просто вызывать определенный метод указанной модели и передавать туда имеющиеся данные.

Ну с моей стороны точно времени нет чтобы решать эту задачу.
Если тебе интересно это можешь сделать и отправить пулл реквест, я рассмотрю :)

@moneyadmin но сперва лучше подробно опиши задачу и ее решение.
Так как путь может быть выбран не правильный и время будет потрачено зря :(

Задача вроде простая: берем форму написания комментариев на Гитхабе. Мы здесь пишем значок @(собаку) и он предлагает нам выбрать пользователей, видимо внутри гитхаба это тоже будет соотнесено по ID. Для такого варианта твой компонент на 100% подходит.
Но в моей задаче, функционал нужно немного расширить, и не только давать выбрать из имеющегося списка но и при написании несуществующего имени его создать при сохранении. Т.е. пишу я @voskobovich и компонент соотносит имя с нужным ID, а пишу @васяпупкин и компонент должен его создать, а потом полученный ID указать в связывающей таблице.

К сожалению квалификации пока не хватает, чтобы осилить подходящий пулл реквест :(