gpt4 book ai didi

php - 如何在 PHP 中使用左连接数据将数据从映射器保存到实体

转载 作者:行者123 更新时间:2023-11-29 22:52:35 26 4
gpt4 key购买 nike

我有简单的定制实体和映射器类。 Mapper用于从Database中获取数据,Entity是一个集合对象,包含变量、getter/setter方法以及Entities之间的关系。

模型\实体\类别

class Category extends Entity
{
private $id, $name, $link;

// belongs to
private $category;

// has many
private $categories;

// relations - belongs_to, has_many, has_one...
private $belongs_to = array ('category');
private $has_many = array ('categories');

// here goes getters, setters for id, name, category, categories...
}

模型\映射器\类别

class CategoryMapper extends Mapper
{
public function loadTopNavigation()
{
$categories = array();

$data = $this->db->query('SELECT category.name, category.link, category_master.name AS category_name, category_master.link AS category_link
FROM category
LEFT JOIN category AS category_master
ON category_master.id=category.category_id')
->get();

foreach ($data as $row) {
$categories[] = new Category($row);
}

return $categories;
}
}

使用

$categoryMapper = new CategoryMapper();
$categories = $categoryMapper->loadTopNavigation();
foreach ($categories as $category) {
echo '<li>' . $category->getName() . ' - ' . $category->getCategory()->getName() . </li>;
}

从数据库获取数组:

  • 姓名
  • 链接
  • 类别名称
  • category_link

预期数组:

  • 姓名
  • 链接
  • 类别 => 数组(名称、链接)

如果我有 2 个查询,我可以获取类别数组 - 首先我获取类别,然后第二个查询将根据子 ID 获取主类别并将其保存到 $categories[]['category'];

有什么建议吗?我可以在 Mapper 类中创建方法来检查所有 category_ 行并将它们设置在特殊的 category = array () 中或在实体类中执行此操作...或者是否有任何其他方式?

最佳答案

我明白了!正如我在上面的文章中所说,我在 Mapper 类中创建了一个方法,该方法运行从数据库中获取的行,并查看它是否包含 category_ 字符串。如果是,则将其保存在特殊的 $category 数组中。

首先,我想将此方法放入 Entity 类中,但是如果我将 SQL Mapper 切换为 XMLJSON 或类似的具有不同键名的内容,那么我在正确保存值时会再次遇到问题。

它看起来像这样:

foreach ($data as $key => $value) {
$class = strstr($key, '_', true);
if (in_array($class, $this->belongs_to)) {
// adding $key and $value to newly created array $category = array()
}
}

关于php - 如何在 PHP 中使用左连接数据将数据从映射器保存到实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28832014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com