afilina/nestedsql

dev-master / 1.0.x-dev 2015-12-17 19:55 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:42:54 UTC


README

PHP >=5.4

您可以通过 Composer 安装此文件

composer require afilina/nestedsql dev-master

这是一个简单的函数,用于将您的 PDO 语句作为嵌套结果集检索。当您对 ORMs 的其他功能不感兴趣时,这可以作为一个替代方案。

这是您应该期望的输出。

stdClass Object
(
    [albums] => Array
        (
            [1] => stdClass Object
                (
                    [id] => 1
                    [photos] => stdClass Object
                        (
                            [id] => 1
                        )
                )
            [2] => stdClass Object
                (
                    [id] => 2
                    [photos] => stdClass Object
                        (
                            [id] => 3
                        )
                )
        )
)

用法

以下是您格式化 SQL 的方式。函数假定您为每个对象使用一个 id 别名,并且它是唯一的。

SELECT album.id AS albums__id, photo.id AS albums__photos__id
FROM album
LEFT JOIN photo ON photo.album_id = album.id;

要使用此函数,只需像这样引入它:

$statement = $pdo->prepare($sql);
$statement->execute();
$fetch_nested_sql = require 'src/NestedSql.php';
$result = $fetch_nested_sql($statement);

如果您想使用自定义类而不是 stdClass,请在第二个参数中传递它们。如果您想指定单例属性,请在第三个参数中传递它们

$result = $fetch_nested_sql($statement, [
    'albums' => 'CustomAlbum',
    'photos' => 'CustomPhoto',
], [
    'photos'
]);

对于任何省略的类,函数将使用 stdClass。

贡献

这是我解决项目中的一个问题的快速且简单的方法。如果您找到了更好的方法或添加了有用的功能,我当然欢迎您提交拉取请求。只要您保持归属,您可以自由地将它纳入您的库中。