Здравствуйте.

Делаю корзину для интернет магазина и столкнулся с проблемой.

У меня есть мутатор getCostAttribute(). Поля ‘cost’ в таблице с товарами не существует. Этот мутатор возвращает стоимость товара с учетом скидки (если таковая есть).

Проблема заключается в следующем.
При добавлении товара в корзину, я сохраняю его модель в сессию вот так:
Session::put("product.{$id}", $product->getAttributes()). Таким образом я храню товары в корзине пользователя в виде массива, который получаю через метод getAttributes().
Однако этот метод не возвращает атрибут cost, который я указал в классе модели: protected $appends = ['cost'], — он его просто игнорирует.
Также у модели есть привязанный к ней файл, описанный через $attachOne — это картинка товара. Она тоже игнорируется

Как мне сделать так, чтобы модель в сессии сохранялась полностью вместе с $appends параметрами?

  • reazzon ответили на это сообщение.

    А зачем вообще корзину сохранять в сессии? Можно же в бд его держать. А id корзины уже хранить в сессии а после авторизации передать записать user_id в корзине

    • DontFollow ответили на это сообщение.

      webmasterSasha на сайте нет регистрации/авторизации. Поэтому нужно как-то запоминать пользователя

      Окей, корзина в базе данных, а id корзины в сессии. Так будет проще, поверьте!

      • DontFollow ответили на это сообщение.

        webmasterSasha идея хорошая, но сессия же не бесконечная. Как потом базу данных очищать от корзин пользователей?

        Запускайте крон задачу раз в три дня, чтоб он удалял старые корзины

        Есть еще у кого-нибудь варианты решения проблемы? @Koresh, @reazzon

        • Изменено

        DontFollow Попробуй сохранить модель в сессии как $product->toArray();. getAttributes() не совсем для таких целей существует.