Загрузка / сохранение объектов PHP в базу данных MySQL

У меня есть объект для «листинга», который имеет такие атрибуты, как id, имя, описание и т. д., Которые можно загрузить с помощью метода load ($ id).

У него также есть некоторые дополнительные атрибуты. Например несколько товаров (это отдельный объект). Чтобы повысить производительность, я загружаю их, когда вы пытаетесь получить к ним доступ с помощью list-> getProducts ().

Теперь мне нужен метод save в листинге, чтобы сохранить значения обратно в базу данных MySQL. Но я не уверен, как сохранить этот продукт чистым способом. Лучшим способом было бы добавить метод сохранения к объекту продуктов и вызвать его из объекта листинга, но при этом сохраняются только значения. Как мне обращаться с добавленными / удаленными продуктами? Я думаю, это должен делать объект листинга. Но как мне узнать, все ли продукты были удалены или они даже не были загружены (потому что к ним не было доступа)?

Все способы, такие как хранение логических загруженных продуктов, кажутся глупым решением. Ты знаешь, как с этим справиться? У меня неплохой опыт в программировании, но я хочу улучшить свою структуру, так как я всегда заканчиваю большим количеством беспорядка кода, если проекты становятся больше.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
94
2

Ответы 2

Я предполагаю, что мы говорим о добавлении, редактировании и удалении продуктов в вашей базе данных. Таким образом, вам, вероятно, понадобится метод «вставить» и метод «удалить» (вызываемый из вашего списка). а также метод «сохранить» (обновить).

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

Если вы просто разрешаете пользователю вводить волей-неволей в поля ввода, чтобы вы не могли сказать, является ли это редактированием, вставкой или удалением (или действительно, какой продукт вы редактируете или удаляете, если вы разрешаете / каждый / поле, которое нужно изменить), то вы действительно усложняете свою жизнь - необходимо ли это с точки зрения бизнес-требований / дизайна пользовательского интерфейса?

Рассмотрим что-то вроде перечисления существующей информации только для чтения и предоставления кнопок редактирования / вставки / удаления.

Думаю, я не объяснил это должным образом. У меня есть две модели, одна называется листингом, который имеет атрибуты id, name, description, products и метод load ($ id), который извлекает поля id, name и description из таблицы базы данных «листинг». Существует второй метод loadProducts (), который загружает продукты, связанные с листингом, из таблицы продуктов и сохраняет их (как массив продуктов) в атрибуте продуктов листинга. Вопрос: Как мне после манипуляций сохранить обратно в БД? save () метод, который сохраняет атрибуты id, name, description очень прост.

Kulimeya 14.06.2018 14:27

Может быть, я загружаю список с его продуктами, удаляю продукт из массива, добавляю 2 новых и вызываю list-> save (). Теперь я хочу, чтобы продукт и ассоциация из таблицы list_product были удалены, 2 новых продукта были созданы и связаны в db. Я знаю запросы и все такое, но с каким объектом что мне делать? save () в "продукте"? Но это не могло создать ассоциации с листингом. И как я могу предотвратить удаление всех продуктов, если я не загружал их с помощью list-> loadProducts (), поскольку массив будет пуст?

Kulimeya 14.06.2018 14:32

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

MandyShaw 14.06.2018 15:10

Думаю, я нашел более-менее хороший способ самостоятельно.

По первой проблеме (где что сохранять): Сохранение основных атрибутов листинга в методе listing->save(), позвонив в listing->products[]->save(), чтобы сохранить информацию о товарах, синхронизация списка <-> товарных ассоциаций в listing->save().

Вторая проблема (удаление товаров только потому, что они не загрузились): Это было довольно просто: listing->products = null -> не загружен, listing->products = array() -> загружен, но пустой. (Я должен был получить это раньше, ха-ха)

Другие вопросы по теме