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