legiaifenix / databasegate
Laravel 数据库管理器,帮助开发者使数据库结构更清晰、可视化
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);