legiaifenix/databasegate

Laravel 数据库管理器,帮助开发者使数据库结构更清晰、可视化

0.1.9 2016-09-20 10:16 UTC

This package is not auto-updated.

Last update: 2024-09-23 12:38:56 UTC


README

#Legiai Fenix DatabaseGate

版本: 0.1.8 框架: Laravel 5.* 许可证: MIT

支持的功能: select, join, leftJoin, where, orWhere, whereBetween, group, sum, count, paginate, delete, update, insert

未来支持: PDO

这是一个小巧的包,旨在加速 Laravel 开发。其目标是简化数据库表的使用,以最小化编写的代码,并为开发者提供一个可视化的方式来理解他们构建的查询。通过它,他们可以在任何所需的服务/控制器中调用并使用整个数据库,只需一个类即可。

您将创建包含键的数组,这些键将导航您的数据库并获取所需的信息

##安装 要开始使用此包,需要两个步骤。

1. 在 CMD 中运行以下命令来要求包

    composer require legiaifenix/databasegate

或者将其添加到您的 composer.json 文件中的 "required" 字段

    "require": {
            ...
            "legiaifenix/databasegate": "*"
        },

2. 要在您的控制器/服务/类中使用它,只需注入所需的类即可!

    public function reallyNeedToSortThis(DatabaseService $databaseService)
    {
        return $databaseService->getEntriesOfTableWithConditions($yourDesiredTable, $yourConditions);
    }

请参阅以下文档,了解如何访问您的表和排序搜索!

注意:如果未提供主要逻辑的顺序,则包现在将考虑 SELECT。例如,如果您有连接、where 或其他不属于主要逻辑类别(SELECT、UPDATE、DELETE 或 INSERT)的子句,它将获取您的条件并默认执行 SELECT。

##获取产品表中的总产品数

    $conditions = [
        'count' => '*'
    ];

    $results = $databaseGate->getEntriesOfTableWithConditions('products', $conditions);

##获取每个客户的产品

假设您已经从 "products" 表中获取了产品,从 "clients" 表中获取了客户;

    $conditions = [
        'select' => [
            ['clients.name'],
            ['clients.email'],
            ['products.*']
        ],
        'join' => [
            'products' => ['products.client_id', '=', 'clients.id']
        ]
    ];

    $results = $databaseGate->getEntriesOfTableWithConditions('clients', $conditions);

##左连接

多亏了 Joao Cunha,我才能记住 LEft Joins 是缺失的。所以这里是它的新实现。它们的工作方式与右连接完全相同,只是它们是左连接。令人震惊。左连接将获取关联,无论是否有值。而右连接将仅获取搜索中缺失的行。我们在每次搜索时都不必拥有行,对吗?

这里是

    $conditions = [
            'select' => [
                ['clients.name'],
                ['clients.email'],
                ['products.*']
            ],
            'leftJoin' => [
                'products' => ['products.client_id', '=', 'clients.id']
            ]
        ];
    
        $results = $databaseGate->getEntriesOfTableWithConditions('clients', $conditions);

##如果您希望按每页 5 条分页查询

    $conditions = [
        ...
        'paginate' => '5'
    ];

    $results = $databaseGate->getEntriesOfTableWithConditions('clients', $conditions);

##仅获取名为 "Mark" 的客户的产品,并按每页 15 条分页

    $conditions = [
        'select' => [
            ['clients.name'],
            ['clients.email'],
            ['products.*']
        ],
        'join' => [
            'products' => ['products.client_id', '=', 'clients.id']
        ],
        'where' => [
            ['clients.name', 'LIKE', 'Mark%']
        ],
        'paginate' => '15'
    ];

    $results = $databaseGate->getEntriesOfTableWithConditions('clients', $conditions);

##获取所有可见的产品

当您针对单个表(我将其视为所有搜索的主表)时,除非您只需要它的一小部分列,否则无需指定选择。这取决于您用于逻辑的值和列。

    $conditions = [
        'where' => [
            ['products.visible', '=', '1']
        ]
    ];

    $results = $databaseGate->getEntriesOfTableWithConditions('products', $conditions);

##计算名为 "example@email.com" 的客户的全部产品成本并获取其电子邮件

我们将添加该 "example@email.com" 电子邮件的客户的所有产品价格,并将该列命名为 "totalCost",以便在视图中使用。

    $conditions = [
        'select' => [
            ['clients.email'],
            ['( sum(products.price) )', 'totalCost']
        ],
        'join' => [
            'clients' => ['clients.id', '=', 'products.client_id']
        ],
        'where' => [
            ['clients.email', '=', 'example@email.com']
        ]
    ];

    $results = $databaseGate->getEntriesOfTableWithConditions('products', $conditions);

在视图中,我们可以使用对象如下

    Client Email: {{$results->email}}
    Total Cost: {{$results->totalCost}}

##计算所有这些信息!

如果您只想获取成本,则不需要提供选择,您可以将条件数组部署为仅返回添加的值

    $conditions = [
            'join' => [
                'clients' => ['clients.id', '=', 'products.client_id']
            ],
            'where' => [
                ['clients.email', '=', 'example@email.com']
            ],
            'sum' => 'products.price'
        ];

    $results = $databaseGate->getEntriesOfTableWithConditions('products', $conditions);

##需要价格在 30 到 70 之间!

没问题,让我们从例子开始。

    $conditions = [
                'join' => [
                    'clients' => ['clients.id', '=', 'products.client_id']
                ],
                'where' => [
                    ['clients.email', '=', 'example@email.com']
                ],
                'whereBetween' => [
                    'price' => ['30', '70']
                ],
                'sum' => 'products.price'
            ];

        $results = $databaseGate->getEntriesOfTableWithConditions('products', $conditions);

就像连接一样,您可以添加更多的数组来指定更多的 where between 子句。当然,这些值的数组由比较所拥有的列名引导。

##关于拥有及其彩虹魔法呢?!

冷静点,朋友,拥有已经插入,同样可以拯救世界!

这里有一个例子,展示如何使用它来拯救你的世界!它确实拯救了我的!

    $conditions = [
                    'join' => [
                        'clients' => ['clients.id', '=', 'products.client_id']
                    ],
                    'where' => [
                        ['clients.email', '=', 'example@email.com']
                    ],
                    'having' => [
                        ["sum(orders.cost) = $value or sum(orders.q) = $value"]
                    ],
                    'sum' => 'products.price'
                ];

            $results = $databaseGate->getEntriesOfTableWithConditions('products', $conditions);

没错,你猜对了!它只支持原始拥有查询,但这并不意味着它很难,以至于破坏了你的感情,对吧?无论如何,我将在稍后添加查询输出,以帮助你在需要时调试它们,或者创建对它如何工作的更深入的理解。

#自定义分页

你可以通过自定义分页实现自己的目标行数。这与分页本身并没有太大区别。你只需用一个包含两个值的数组[跳过,数量]来替换单个值。

所以,让我们模拟一下,我们想要25个结果,对应于第3页。

    $conditions = [
            ...
            'pagination' = ['3', '25']
    ];

就是这样!享受你的自定义分页方法!当然,尝试以动态方式实现页面和结果数量,而不是像这个例子那样静态。该死,谁做的这个例子?

##调试我的查询

V.0.1.3包括了针对选择查询的调试。这些查询可能会更复杂,并不完全直接。因此,调试它们的必要性很大。要开始调试它们,你只需在调用末尾添加一个布尔值true。

示例:条件示例

                $conditions = [
                    'select' => [
                        ['colors.*']
                    ],
                    'order' => ['color_name', 'ASC']
                ];
    $results = $this->databaseGate->getEntriesOfTableWithConditions('colors', $conditions, true);
    var_dump($results);

输出

    select colors.* from `colors` order by `color_name` asc

带有连接的调试示例

            $conditions = [
                'select' => [
                    ['products_colors.*'],
                    ['colors.*']
                ],
                'joins' => [
                    'colors' => ['colors.id', '=', 'products_colors.color_id']
                ],
                'where' => [
                    ['colors.color_name', '=', 'test']
                ],
                'order' => ['color_name', 'ASC']
            ];

输出

    select products_colors.*,colors.* from `products_colors` where `colors`.`color_name` = ? order by `color_name` asc

#删除查询

如果你希望从数据库中删除条目,你肯定知道Laravel提供了这个选项,甚至更多!目前我只是允许永久删除。稍后打算添加软删除。

条件示例

            $conditions = [
                'delete' => [
                    'permanent'    
                ],
                'where' => [
                    ['col', '=', '<title>']
                ]
            ];     

删除操作已经是一个数组,以适应后续的更改,这些更改将包括软删除。目前请按显示的这样使用。

#插入

这个插入将返回数据库中插入的新ID。因此,你可以有一个对象或变量来期望它。

条件示例

            $conditions = [
                'insert' => [
                    'title' => 'test', 
                    'price' => '33.33', 
                    'other col here' => 'other value here' 
                ]
            ];     
    $id = $this->databaseGate->getEntriesOfTableWithConditions('<table name>', $conditions);
    var_dump($results);

#更新信息

        $conditions = [
            'update' => [
                'title' => 'Title1',
                'desc' => 'description here'
            ],
            'where' => [
                ['title', '=', 'what I want to change']
            ]
        ];
       
        $this->databaseGate->getEntriesOfTableWithConditions('table name', $conditions);