【问题标题】:Loading/saving PHP objects to MySQL database将 PHP 对象加载/保存到 MySQL 数据库
【发布时间】:2018-06-14 11:24:58
【问题描述】:

我有一个“列表”对象,它具有 id、名称、描述等属性,可以通过 load($id) 方法加载。

它也有一些高级属性。例如多个产品(这是一个单独的对象)。为了提高性能,当您尝试使用 Listing->getProducts() 访问它们时,我会加载它们。

现在我想要一个列表中的保存方法,将值保存回 MySQL 数据库。但我不确定如何以干净的方式保存该产品。 最好的方法是向产品对象添加一个保存方法并从列表对象中调用它,但这只会保存值。如何处理添加/删除的产品?这必须由我认为的列表对象来完成。但是我怎么知道是否所有产品都被删除了,或者它们甚至没有被加载(因为它们没有被访问)?

所有方式,例如存储布尔加载的产品似乎都是一个愚蠢的解决方案。你知道如何处理吗?我在编码方面并非缺乏经验,但我想改进我的结构,因为如果项目变得更大,我总是会以大量的代码混乱结束。

【问题讨论】:

    标签: php mysql object


    【解决方案1】:

    我假设我们正在讨论在您的数据库中添加、编辑和删除产品。因此,您可能需要一个“插入”方法和一个“删除”方法(从您的列表视图中调用)。以及“保存”(更新)方法。

    但问题是,或者我理解的是,您不知道在特定产品线上使用哪一个。

    如果您只是允许用户随意在输入字段中输入,那么您就无法判断这是编辑、插入还是删除(或者如果您确实在编辑或删除哪个产品,允许更改 /every/ 字段),那么您的生活真的很复杂 - 从业务需求/UI 设计的角度来看,这是必要的吗?

    考虑以只读方式列出现有信息并提供编辑/插入/删除按钮。

    【讨论】:

    • 我想我没有正确解释。我有两个模型,一个称为列表,它具有属性 id、name、description、products 和一个方法 load($id),它从数据库表“listing”中获取字段 id、name 和 description。还有第二种方法 loadProducts(),它从 products 表中加载与列表关联的产品并将它们(作为产品数组)存储到列表的产品属性中。问题是:操作回数据库后如何保存它?保存属性 id、name、description 的 save() 方法很简单。
    • 也许我用它的产品加载一个listing,从数组中删除一个产品,添加2个新的并调用listing->save()。现在我想要从 Listing_product 表中删除产品和关联,在数据库中创建并关联 2 个新产品。我知道查询和所有这些东西,但是我应该在哪个对象中做什么? “产品”中的保存()方法?但这无法与列表关联。当我没有使用listing->loadProducts()加载所有产品时,如何防止删除所有产品,因为数组将为空?
    • 我真的认为你会更好地这样做,尤其是数据库部分,在单个产品级别 - 除了其他任何事情之外,一次完成所有工作肯定是不可扩展的(并且同时编辑会话由多个用户将很难处理)。所以我真正想说的是'不要从这里开始',我很害怕。 (典型的在线购物车每行都有一个删除按钮,而不是让您编辑它,这是有原因的。)
    【解决方案2】:

    我想我自己找到了或多或少的好方法。

    对于第一个问题(在哪里保存什么): 在listing->save()方法中存储listing的基本属性, 致电listing->products[]->save() 存储产品详细信息, 同步listing->save() 中的列表产品关联。

    第二个问题(删除产品,只是因为它们没有加载): 这很简单,listing->products = null -> 未加载,listing->products = array() -> 已加载,但为空。 (我应该早点得到这个,哈哈)

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 2011-04-01
      • 2012-09-29
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 2021-11-06
      相关资源
      最近更新 更多