esports/database
Composer 安装命令:
composer require esports/database
包简介
Nette Database Component
README 文档
README
@see nette/database
Rozšíření API
Podmínka v LEFT JOIN
Podmínka je připojena k LEFT JOIN klauzuli
...->left()
$selection = $context->table('book') ->left(':product_price.active', 1) ->select('book.*, :product_price.value');
SELECT book.*, product_price.value FROM book LEFT JOIN product_price ON book.id = product_price.book_id AND (product_price.active = 1)
$selection = $context->table('book') ->left(':product_price.active', 1) ->where(':book_tag.tag.name LIKE', 'PHP') ->left(':product_price.value > ?', 0) ->left(':book_tag.tag_id IS NOT NULL') ->select('book.*, :product_price.value');
SELECT book.*, product_price.value FROM book LEFT JOIN book_tag ON book.id = book_tag.book_id AND (book_tag.tag_id IS NOT NULL) LEFT JOIN tag ON book_tag.tag_id = tag.id LEFT JOIN product_price ON book.id = product_price.book_id AND (product_price.active = 1 AND product_price.value > 0) WHERE (tag.name LIKE "PHP")
Podmínky lze libovolně míchat, jenom je třeba mít na paměti, že bude podmínka připojena k LEFT JOIN klauzuli podle prvního sloupečku v podmínce (obvykle je uveden jenom jeden, takže netřeba řešit).
$selection = $context->table('book') ->left(':product_price.active', 1) ->left(':book_tag.tag_id IS NOT NULL OR :product_price.active IS NOT NULL') // bude pripojeno k book_tag ->select('book.*, :product_price.value');
SELECT book.*, product_price.value FROM book LEFT JOIN product_price ON book.id = product_price.book_id AND (product_price.active = 1) LEFT JOIN book_tag ON book.id = book_tag.book_id AND (book_tag.tag_id IS NOT NULL OR product_price.active IS NOT NULL)
Aliasování
...->alias()
$selection = $context ->table('book') ->alias(':product_price', 'pp') ->left('pp.active', 1) ->select('book.*, pp.value');
SELECT book.*, pp.value FROM book LEFT JOIN product_price AS pp ON book.id = pp.book_id AND (pp.active = 1)
$selection = $context->table('book') ->alias(':product_price', 'pp') ->left('pp.active', 1) ->alias(':book_tag.tag', 't') ->where('t.name LIKE', 'PHP') ->left('pp.value > ?', 0) ->left(':book_tag.tag_id IS NOT NULL') ->select('book.*, pp.value');
SELECT book.*, pp.value FROM book LEFT JOIN book_tag ON book.id = book_tag.book_id AND (book_tag.tag_id IS NOT NULL) LEFT JOIN tag AS t ON book_tag.tag_id = t.id LEFT JOIN product_price AS pp ON book.id = pp.book_id AND (pp.active = 1 AND pp.value > 0) WHERE (t.name LIKE "PHP")
LEFT JOIN s aliasem, ale vybira se z ne-aliasovane
$selection = $context ->table('book') ->alias(':product_price', 'pp') ->left('pp.active', 1) ->select('book.*, :product_price.value');//tricky
SELECT book.*, product_price.value FROM book LEFT JOIN product_price AS pp ON book.id = pp.book_id AND (pp.active = 1) LEFT JOIN product_price ON book.id = product_price.book_id
Vyřazení řetězce z vyhledávání
Stává se, že v subselectu je třeba použít alias tabulky, a s ním pracovat. Klasická Selection se snaží tento alias dohledat, což končí chybou:
...->where('author.id = (SELECT b.author_id FROM book AS b LIMIT 1)');
Řešením je použití vykřičníku před !b.author_id, celé to vypadá:
$selection = $context->table('author') ->where('author.id = (SELECT !b.author_id FROM book AS b LIMIT 1)');
SELECT * FROM author WHERE (author.id = (SELECT b.author_id FROM book AS b LIMIT 1))
Force index
Stejně jako v SQL: Zajistí použití požadovaného indexu.
...->forceIndex()
$selection = $context->table('book') ->forceIndex('use_this_index') ->select('book.*');
SELECT book.* FROM book FORCE INDEX (`use_this_index`)
esports/database 适用场景与选型建议
esports/database 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 584 次下载、GitHub Stars 达 4, 最近一次更新时间为 2014 年 04 月 02 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 esports/database 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 esports/database 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 584
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 4
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2014-04-02