Anonymous
я предполагал, что (в твоем например случае) при таком удалении для модели Dialog вызывается метод перед фактическим удалением)
Anonymous
слушай а какую ошибку тебе выдает когда ты вызываешь delete() на модели,
Anonymous
Доброе утро, ребят подскажите какой пакет лучше (исходя из личного опыта) заюзать для многоуровневых категорий?
Anonymous
я предполагал, что (в твоем например случае) при таком удалении для модели Dialog вызывается метод перед фактическим удалением)
у меня такая тема, если я удаляю диалог, то у меня автоматически удаляются все сообщения в нем.
Anonymous
мне никакую ошибку не выдает, просто до ивента не доходит дело)) я хотел сделать удаление файлов поста поэтому я при удалении постов (ловлю ивент deleting, вызываю $post->files()->delete() , а для модели File ивент deleting тупо не вызывается)
Anonymous
если я удаляю пользователя
Anonymous
то удалаятся диалоги и сообщения
Maksim (Ellrion)
ну это на самом деле совсем не очивидно, что из-за такого удаления связанных моделей, ивенты не вызываются)
Очень даче очевидно. Это же действие делает сама бд. Приложение об этом ничего не знает
Anonymous
для массовых операций ивенты не работают
то есть если по одному буду удалять то заработает?
Maksim (Ellrion)
Эвенты есть только у инстансов моделей
TSka
Если будешь удалять через модель, то естественно заработает
TSka
А так у тебя удалением БД занимается
Anonymous
понял, пойду попробую, спасибо)
TSka
Доброе утро, ребят подскажите какой пакет лучше (исходя из личного опыта) заюзать для многоуровневых категорий?
Смотря, что конкретно тебе нужно. Например, lazychaser/laravel-nestedset, если тебе нужен nested set.
Anonymous
Смотря, что конкретно тебе нужно. Например, lazychaser/laravel-nestedset, если тебе нужен nested set.
Нужно реализовать бесконечное вложение категорий и подкатегорий и безболезненно их получать и продукты по ним. Пробовал стандартными связями ларавеля, получается только второй уровень получить, а на последующие уровни хотел построить рекурсию, но пока не получается, вот и начал смотреть в сторону пакетов
Nik
забудь про рекурсию
TSka
Примитивная таблица id, parent_id уже позволяет сделать бесконечную вложенность. А дальше уже от конкретных задач зависит
Nik
nested sets или closure table. мне вторая более импонирует, гибче
Anonymous
Примитивная таблица id, parent_id уже позволяет сделать бесконечную вложенность. А дальше уже от конкретных задач зависит
Дело в том что и так таблица такая как Вы и говорите, но никак не могу получить вложенность глубже второго уровня
TSka
nested sets и closure table - это модели хранения иерархии. По ним есть уже готовые пакеты для всего на свете, и laravel в том числе
Евгений
Я nested sets подход бдал, и пакет для лары есть нормальный
Anonymous
я о подходах
уже думал реализовать что-то типа нестед сет самостоятельно, но уж очень сильно не хочется изобретать велосипед, если есть уже готовые решения
TSka
Дело в том что и так таблица такая как Вы и говорите, но никак не могу получить вложенность глубже второго уровня
Не понятно, в чем проблема. id 1, parent_id 0, name root id 2, parent_id 1, name child1 id 3 , parent_id 2, name child2 Вот и три уровня
Anonymous
В чем проблема?
никак не могу получить вложенность глубже второго уровня стандартными связями в ларавеле
TSka
никак не могу получить вложенность глубже второго уровня стандартными связями в ларавеле
ну, у каждой категории есть отношения parent() belongsTo и childs() hasMany. Берешь любую категорию и получаешь из нее дочерние. Проблемы возникают только если нужно строить каталоги частичные или полные. Тогда лучше Nested sets
Anonymous
Не понятно, в чем проблема. id 1, parent_id 0, name root id 2, parent_id 1, name child1 id 3 , parent_id 2, name child2 Вот и три уровня
да, по структуре как это должно быть это работает, а вот когда получаю коллекцию категорий то получается категория -> дочерняя категория, а вот если у дочерней категории есть своя категория, то я ее уже не получаю
TSka
А, ну понятно, нужно указывать в ленивой загрузке глубину вложенности, а заранее ее ты не можешь знать. Ищи готовый пакет с nested sets, он точно умеет то, что тебе надо с одним лишь минусом - очень долго перестраивает деревья при изменении категорий
Nik
долго это понятие относительное :) формально там просто идет сдвиг на +2 части дерева
TSka
ну, если тебе нужно получить все дерево категорий, то ты запрашиваешь как Categories::with('children', 'children.children', 'children.children.children'...). Или в модели указываешь protected $with = ['children'];, но тогда любая категория будет доставаться с полным древом дочерних, что тоже не всегда удобно
TSka
долго это понятие относительное :) формально там просто идет сдвиг на +2 части дерева
ну, фактически это означает, что вместо одной категории мы правим всю ветвь
TSka
Если собираешься постоянно дергать большими ветвями, то бери nested sets, он позволяет сильно сэкономить на запросах к БД.
Anonymous
Если собираешься постоянно дергать большими ветвями, то бери nested sets, он позволяет сильно сэкономить на запросах к БД.
https://github.com/lazychaser/laravel-nestedset Вы имеете ввиду этот пакет или реализовывать самому?
TSka
Ага, этот
Anonymous
Ага, этот
спасибо Вам большое за помощь
TSka
Просто почитай про nested sets, что это такое, и как работает. Чтобы понимать, как лучше использовать
Anonymous
Просто почитай про nested sets, что это такое, и как работает. Чтобы понимать, как лучше использовать
сейчас с этого и начну, были когда-то проблемы с установленными пакетами, после этого я очень чательно подхожу к вопросу установки стороннего кода в свои проекты, так что для начала почитаю про нестед сеты, еще раз огромное спасибо
Anton
А ещё есть подход маьериализед паз
Anton
Но его очень давно не видел в применении
Anton
https://packagist.org/packages/langaner/materialized-path
Anton
Даже пакет какой-то для лары есть
Александр
коллеги, подскажите такой вопрос. Есть поле в определенном формате, но мне в запросе его перед сравнением нужно преоразовать в другой формат. Понимаю, что без замыкания не обойтись, но внутри как?
Александр
неее. в базе хранится дата строкой вида 25 май, а мне нужно сравнить например с текущей датой, потому нужно 25 май сначала преобразовать в нормальный вид
Александр
хелпер самого преобразования уже есть
Александр
мутатор насколько я понимаю преобразует уже все на выходе, или я ошибаюсь?
Александр
да, вернее ассемор
Александр
но в любом случае мне нужно наложить фильтр на это поле в правильном вормате
TSka
https://laravel.com/docs/5.6/eloquent#local-scopes ?
TSka
Я так понял, это для поиска используется?
Александр
в скопах тоже нужно пиать условие отбоа:)
Maksim (Ellrion)
но в любом случае мне нужно наложить фильтр на это поле в правильном вормате
а почему ты неможешь не значение поля преобразовать а то с которым оно сравнивается? (вообще изначально я тебя понял не так и думал не о квери а о реквесте)
Александр
да вот тоже думаю, что так проще. Но хочется на всяк случай и такое уметь
Maksim (Ellrion)
да вот тоже думаю, что так проще. Но хочется на всяк случай и такое уметь
самому придется через whereRaw тогда писать и менять формат средствами бд
Александр
Я так понял, это для поиска используется?
мне нужно определенные манипуляции сделать со строками, но отбор сделть по этому полю
TSka
Тогда сильно проще сделать where('date', format_date(now())), чем преобразовывать дату в БД перед сравнением
TSka
Если сделать аксессор, скоуп и мутатор, можно вообще постоянно с карбоном работать и не думать, что там в БД хранится
Александр
да, но как тогда проверить не просто =, а < текущей даты?
TSka
а как раньше проверялось? "25 май" без указания года - это не конкретная дата
Александр
ну предполагается, что шедулер будт это делать каждый день, но мало ли что :)
Александр
но спасибо за идеи... буду рыть
TSka
А переделать на человеческий timestamp уже совсем поздно?
Anonymous
А ещё есть подход маьериализед паз
Только что прочитал про него, довольно интересный алгоритм, попытаюсь реализовать без пакетов, спасибо за подсказку
Anton
Только что прочитал про него, довольно интересный алгоритм, попытаюсь реализовать без пакетов, спасибо за подсказку
Он по моему хорош для форума, но не категорий товаров. :). И да - я за разнообразие - а то как бесконечная вложенность так нестед сетц. Уже поднадоела :).
Anonymous
Он по моему хорош для форума, но не категорий товаров. :). И да - я за разнообразие - а то как бесконечная вложенность так нестед сетц. Уже поднадоела :).
Да Вы правы многие туториалы склоняются к объяснению как раз на примерах комментариев, но ведь по сути это те же категории, только допустим будут иметь не на столько глубокую вложенность, а так в принципе одно и тоже, если все же ошибаюсь, поправьте.
Anton
Ненене - все абсолютно верно.
Anonymous
Ненене - все абсолютно верно.
подскажите пожалуйста, не могу понять как построить алгоритм построения колонки path в MP. Исли Вас не затруднит, не могли бы разьяснить как именно строится path для каждой записи?
Anonymous
Сейчас уже не помню, надо документацию заново читать :)
Понял, спасибо за хорошую наводку, буду штудировать мат часть))
Anton
Какой у нас культурный чат! Вместо пятничных срачей - приятная интеллегентная беседа!