Научное название связи M:M но без промежуточной таблицы

StalkerClasses

Новичок
Это не паттерн, а антипаттерн, потому что он не гарантирует целостность данных. Надо делать нормальную связь через промежуточную таблицу с ключами, а поле через запятую городить отдельно, если требуется оптимизация. С учётом того, что ты уже более полугода носишься с этой проблемой, оптимизация тебе никогда не понадобится.
Мне не нужно оптимизировать. Меня вполне устраивает - в таких полях используется 5-15 значений. И во многих проектах этот подход используется.
 

AmdY

Пью пиво
Команда форума
Мне не нужно оптимизировать. Меня вполне устраивает - в таких полях используется 5-15 значений. И во многих проектах этот подход используется.
Во многих.... Если постоянно рыться в дерьме, то будет казаться, что весь мир состоит из дерьма.

В чём твоя проблема. Ты же используешь Eloquent, он прекрасно умеет синкать много ко многим из коробки, зачем лепить костыли.

пс Та же фигня у тебя с датой. Создать колонку и перегнать таймстамп в новую колонку с датой это две команды в SQL, а ты неделями долбишься в стекляную стену, которую сам же себе и возвёл.
 

StalkerClasses

Новичок
Во многих.... Если постоянно рыться в дерьме, то будет казаться, что весь мир состоит из дерьма.

В чём твоя проблема. Ты же используешь Eloquent, он прекрасно умеет синкать много ко многим из коробки, зачем лепить костыли.

пс Та же фигня у тебя с датой. Создать колонку и перегнать таймстамп в новую колонку с датой это две команды в SQL, а ты неделями долбишься в стекляную стену, которую сам же себе и возвёл.
Это хорошо когда 1 колонока. И то я бы так не делал.
Мне очень нравиться ORM Laravel и я его использую. Более того я написал несколько кастомных функций которые позволяют прикреплять и откреплять связи не зацикливаясь на том, что за связь. Отказался от такого понятия как blog_id. Есть просто blog связи M:1. Все связи выбираются через API. Создание связей происходит автоматически.

В т.ч. есть реверсивная поддержка связей. Выборка with() динамически. Пишется propref_name...
Если не устраивает какая-то связь то создается кастомная связь от основной связи через $this->refProvider();

Но мне хотелось бы найти также какой-то инструмент и для атрибутов с точки зрения связей.
В том же MODX нет возможности создавать связи для TV-полей. А хотелось бы.
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
И чем твой мусор лучше нативных функций?
$entity->relation()->sync([1,2,3]);
 

AmdY

Пью пиво
Команда форума
Отчего же мусор?
Видемо не часто с ларавель работаете....
потому ты сам понимаешь, что это мусор и удалил код. У тебя там даже шапка с варнингом из комментов, потому что код может работать нестабильно и зависимости от дёргания метода. Статический вызов, стороковые переменные и прочая муть. В то время как есть дока у ларавела и любой программист умеет работать со стандартными методами.
Ты, не программист, не можешь освоить чужой код и лепишь свои кривые костыли. А затем у клиента будет куча проблем и финансовых потерь из-за твоего гавнокода.
PHP:
// !!! WARNING !!! ->withoutGLobalScopes() always !!!
// $relationship, $recordId, $idsToAttach(Detach)
// Все виды связей 1:1, 1:M,. M:1, M:M, полиморфные не все реализованы...
NewTable::refAttach('propref_NAME', 1, [3, 4]);
 

StalkerClasses

Новичок
потому ты сам понимаешь, что это мусор и удалил код. У тебя там даже шапка с варнингом из комментов, потому что код может работать нестабильно и зависимости от дёргания метода. Статический вызов, стороковые переменные и прочая муть. В то время как есть дока у ларавела и любой программист умеет работать со стандартными методами.
Ты, не программист, не можешь освоить чужой код и лепишь свои кривые костыли. А затем у клиента будет куча проблем и финансовых потерь из-за твоего гавнокода.
PHP:
// !!! WARNING !!! ->withoutGLobalScopes() always !!!
// $relationship, $recordId, $idsToAttach(Detach)
// Все виды связей 1:1, 1:M,. M:1, M:M, полиморфные не все реализованы...
NewTable::refAttach('propref_NAME', 1, [3, 4]);
Я удалил код по причине того что вы не полит корректны в своих высказываниях.
Если удалил не нужно выкладывать по новой. Или выкладывай все как было в изначальном формате...

Это не костыль - а абстракция для работы со связями - почему этого нет в ларавель мне не понятно.
Любая связь это 1) создать связь, 2) удалить связь.

Зачем мне знать что есть какой-то "$entity->relation()->sync([1,2,3]); " который не говорит ни о чем.

Не нравится - пусть работает со стандартной документацией.

Фраза: // !!! WARNING !!! ->withoutGLobalScopes() always !!!
Означает другое - что вы удаляете и создаете связи без глобальных скоупов. Т.е. если у вас на модель навешаны скоупы (например удаленность в корзину), то соответственно и связь будет создана с такой записью. Предварительно у вас есть две записи которые нужно связать. Вот вы их и связываете.
 

StalkerClasses

Новичок
И еще дополню - мне очень нравится Yii2 за его простоту, мне не нравится Laravel за его многообразие того хотя бы как можно вывести шаблон. Мне нравится ORM Laravel поэтому ее и использую отдельно. Она очень проста - но тема связей в ней на мой взгляд немного мудреная. Можно было бы и попроще сделать ряд функций - вот я их и допилил.
 

AmdY

Пью пиво
Команда форума
Похоже, вы документацию от Ларавел не осилили. Там прекрасно организована работа со связями из коробки., с человекопонятными терминами и подсказками от IDE.

Просто подумай о клиентах, которые разорятся из-за твоей ограниченности. Сколько ты проблем принесёшь другим своим творчеством.
 

StalkerClasses

Новичок
Похоже, вы документацию от Ларавел не осилили. Там прекрасно организована работа со связями из коробки., с человекопонятными терминами и подсказками от IDE.

Просто подумай о клиентах, которые разорятся из-за твоей ограниченности. Сколько ты проблем принесёшь другим своим творчеством.
Я подумал - именно поэтому дружно битрикс переводим на битрикс+симфони... Особенно понравилось новое меню - было 3 строки кода - стало не понятно что. Рефакторинг кода был такой...
 

StalkerClasses

Новичок
AmdY - ближе к теме бы хотелось.
Изначально вы посоветовали денормализацию....
Но насколько это мне поможет? Я почитал и не нашел решения для задачи описанной в теме. Посмотрел есть место мест где и в symfony используется. Иначе бы все было на связях.
 

AnrDaemon

Продвинутый новичок
Чтобы что-то денормализовать, надо сначала нормализовать. Что логично, но вам, видимо, недоступно.
 

StalkerClasses

Новичок
Похоже, вы документацию от Ларавел не осилили. Там прекрасно организована работа со связями из коробки., с человекопонятными терминами и подсказками от IDE.

Просто подумай о клиентах, которые разорятся из-за твоей ограниченности. Сколько ты проблем принесёшь другим своим творчеством.
Чем это плохо организовано - пример делали проект можно было выбрать 1 категорию. Нужно было переделать на мультикатегории. Переписывай весь код. А суть задачи - поменять вид связи с M:1 на M:M. А так добавил только букву "s".
 
Сверху