PHP 如何使用 Left Joined 数据将数据从 Mapper 保存到实体

How to save data from Mapper to Entity using Left Joined data in PHP

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

Model\Entity\Category

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...
}

Model\Mapper\Category

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>;
}

从数据库中获取数组:

预期数组:

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

有什么建议吗?我可以在 Mapper class 中创建方法来检查所有 category_ 行并将它们设置在特殊的 category = array () 中或者这样做在 Entity class... 或者还有其他方法吗?

我想通了!就像我在上面 post 中所说的,我在 Mapper class 中创建了一个方法,它运行从数据库中获取的行并查看它是否包含 category_ 字符串。如果是,则将其保存在特殊的 $category 数组中。

首先我想把这个方法放在Entityclass里面,但是如果我切换SQLMapper[=22=呢? ] 到 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()
    }
}