【问题标题】:Array in database, use as variable数据库中的数组,用作变量
【发布时间】:2016-08-06 11:18:49
【问题描述】:

我正在制作发票原型以供练习。我使用的是 CakePHP 3,并且项目总是不同的,因此将它们与另一个表中的行关联是行不通的。在每一行中,我都有一个名为 items 的列,其中是一个数组,例如:

    array(
      array("Name" => "apples",
        "Desc" => "a fruit called apple",
        "Price" => "1"
      ),
      array("Name" => "orange",
        "Desc" => "oranges",
        "Price" => "2",
      ),
      array("Name" => "watermelon",
        "Desc" => "watermelon",
        "Price" => "6"
      )
);

我想使用该数组构建一个 foreach 循环来显示发票中的所有项目。

    foreach ($items as $i => $row) {

    echo $row['Name'] . $row['Price'] . $row['Desc'] . "<br>";
}

我正在尝试使用这种方法从列中获取数据

<?php $items = $billing->items; ?>

然而这是我收到的:

Warning (2): Invalid argument supplied for foreach() [APP/Template\Billing\invoice.ctp, line 56]

如果我尝试回显数据,它会回显就可以了。我不明白为什么我不能把它变成一个变量。

<?= h($billing->items); ?>

【问题讨论】:

  • 你可以打印 $billing->items as echo '
    '; print_r($billing->items)?我认为 h 函数用于打印 db 特殊字符,因此它能够将其转换为数组,但通常 foreach 循环不能这样做。
  • 我不确定你的意思,但它确实像使用 print_r($billing-&gt;items) 的 echo 一样打印
  • ...物品总是不同的...”这些物品和我一模一样。
  • 当时我脑子里已经有了结果,但另一个用户将分配名称、描述和价格。因此,与其每次有人输入不同的内容并关联它们时都创建新行,我决定将其存储在数组中是最好的。如果还有什么我可以做的来简化它,我完全赞成。我只是不知道有什么。 @ndm
  • 将项目存储在单独的行中并将它们链接到其他表中的行正是 MySQL 等关系数据库的用途。那么这有什么问题呢?至于您的问题,您不能将数组存储在数据库中,您必须已将其转换为平面格式,并且从错误来看,您尚未(正确)将其转换回来。如果没有相关的详细信息,您可能不会收到任何好的答案。

标签: php mysql cakephp


【解决方案1】:

Cake 只为模型关联而不是列创建实体。在这种情况下,如果您必须使用某种Collection 方法或php array_* 函数手动设置属性。

编辑:

如果要存储为序列化数组,则必须先对其进行反序列化

【讨论】:

  • 您能详细说明一下吗?不是因为它不好,我只是真的不明白。我现在正在看手册中的集合方法。
  • 您是否尝试为项目创建单独的表,例如 Cart hasMany Item
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
相关资源
最近更新 更多