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>;
}
从数据库中获取数组:
- 姓名
- link
- category_name
- category_link
预期数组:
- 姓名
- link
- 类别 => 数组(名称,link)
如果我有 2 个查询,我可以获得类别数组 - 首先我获得类别,然后第二个查询将根据子 ID 获取主类别并将其保存到 $categories[]['category'];
有什么建议吗?我可以在 Mapper class 中创建方法来检查所有 category_ 行并将它们设置在特殊的 category = array () 中或者这样做在 Entity class... 或者还有其他方法吗?
我想通了!就像我在上面 post 中所说的,我在 Mapper class 中创建了一个方法,它运行从数据库中获取的行并查看它是否包含 category_ 字符串。如果是,则将其保存在特殊的 $category 数组中。
首先我想把这个方法放在Entityclass里面,但是如果我切换SQLMapper[=22=呢? ] 到 XML 或 JSON 或类似的具有不同键名的东西,然后我将再次遇到保存问题值正确。
看起来像这样:
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()
}
}
我有简单的自定义实体和映射器 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>;
}
从数据库中获取数组:
- 姓名
- link
- category_name
- category_link
预期数组:
- 姓名
- link
- 类别 => 数组(名称,link)
如果我有 2 个查询,我可以获得类别数组 - 首先我获得类别,然后第二个查询将根据子 ID 获取主类别并将其保存到 $categories[]['category'];
有什么建议吗?我可以在 Mapper class 中创建方法来检查所有 category_ 行并将它们设置在特殊的 category = array () 中或者这样做在 Entity class... 或者还有其他方法吗?
我想通了!就像我在上面 post 中所说的,我在 Mapper class 中创建了一个方法,它运行从数据库中获取的行并查看它是否包含 category_ 字符串。如果是,则将其保存在特殊的 $category 数组中。
首先我想把这个方法放在Entityclass里面,但是如果我切换SQLMapper[=22=呢? ] 到 XML 或 JSON 或类似的具有不同键名的东西,然后我将再次遇到保存问题值正确。
看起来像这样:
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()
}
}