<link rel="canonical" href="https://docs.woltlab.com/6.0/package/database-php-api/">
+
+ <link rel="prev" href="../pip/user-profile-menu/">
+
+
+ <link rel="next" href="../../migration/wsc55/php/">
+
<link rel="icon" href="../../assets/default.favicon.ico">
- <meta name="generator" content="mkdocs-1.3.1, mkdocs-material-8.4.2">
+ <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.17">
- <link rel="stylesheet" href="../../assets/stylesheets/main.69437709.min.css">
+ <link rel="stylesheet" href="../../assets/stylesheets/main.26e3688c.min.css">
- <link rel="stylesheet" href="../../assets/stylesheets/palette.cbb835fc.min.css">
-
-
-
- <meta name="theme-color" content="#009485">
-
+ <link rel="stylesheet" href="../../assets/stylesheets/palette.ecc896b0.min.css">
+
+
</head>
- <body dir="ltr" data-md-color-scheme="" data-md-color-primary="teal" data-md-color-accent="">
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="indigo">
</div>
- <div data-md-component="outdated" hidden>
+ <div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
-<header class="md-header" data-md-component="header">
+
+
+<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../.." title="WoltLab Suite Documentation" class="md-header__button md-logo" aria-label="WoltLab Suite Documentation" data-md-component="logo">
</div>
</div>
+
+
<label class="md-header__button md-icon" for="__search">
</label>
<nav class="md-search__options" aria-label="Search">
- <button type="reset" class="md-search__icon md-icon" aria-label="Clear" tabindex="-1">
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
<div class="md-search-result__meta">
Initializing search
</div>
- <ol class="md-search-result__list"></ol>
+ <ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
<a href="https://github.com/WoltLab/docs.woltlab.com/" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.1.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
GitHub
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2" type="checkbox" id="__nav_2" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
+
- <label class="md-nav__link" for="__nav_2">
+ <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
PHP API
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="PHP API" data-md-level="1">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
PHP API
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5" type="checkbox" id="__nav_2_5" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5" >
+
- <label class="md-nav__link" for="__nav_2_5">
+ <label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0">
API
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="API" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5">
<span class="md-nav__icon md-icon"></span>
API
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_1" type="checkbox" id="__nav_2_5_1" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_1" >
- <label class="md-nav__link" for="__nav_2_5_1">
+
+ <label class="md-nav__link" for="__nav_2_5_1" id="__nav_2_5_1_label" tabindex="0">
Caches
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Caches" data-md-level="3">
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_1">
<span class="md-nav__icon md-icon"></span>
Caches
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_2_5_5" type="checkbox" id="__nav_2_5_5" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_5_5" >
+
- <label class="md-nav__link" for="__nav_2_5_5">
+ <label class="md-nav__link" for="__nav_2_5_5" id="__nav_2_5_5_label" tabindex="0">
Form Builder
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Form Builder" data-md-level="3">
+ <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_5_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5_5">
<span class="md-nav__icon md-icon"></span>
Form Builder
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_3" type="checkbox" id="__nav_3" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
+
- <label class="md-nav__link" for="__nav_3">
+ <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
Languages, Templates & CSS
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Languages, Templates & CSS" data-md-level="1">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Languages, Templates & CSS
+ <li class="md-nav__item">
+ <a href="../../view/template-modifiers/" class="md-nav__link">
+ Template Modifiers
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../view/template-plugins/" class="md-nav__link">
Template Plugins
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4" type="checkbox" id="__nav_4" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
+
- <label class="md-nav__link" for="__nav_4">
+ <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
TypeScript and JavaScript API
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="TypeScript and JavaScript API" data-md-level="1">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
TypeScript and JavaScript API
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_4_3" type="checkbox" id="__nav_4_3" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
- <label class="md-nav__link" for="__nav_4_3">
- New API
+
+ <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
+ Components
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="New API" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
- New API
+ Components
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
- <a href="../../javascript/new-api_writing-a-module/" class="md-nav__link">
- Writing a module
+ <a href="../../javascript/components_confirmation/" class="md-nav__link">
+ Confirmation
</a>
</li>
<li class="md-nav__item">
- <a href="../../javascript/new-api_data-structures/" class="md-nav__link">
- Data Structures
+ <a href="../../javascript/components_dialog/" class="md-nav__link">
+ Dialog
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../javascript/components_google_maps/" class="md-nav__link">
+ Google Maps
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../javascript/components_pagination/" class="md-nav__link">
+ Pagination
+ </a>
+ </li>
+
+
+
+
+ </ul>
+ </nav>
+ </li>
+
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item md-nav__item--nested">
+
+
+
+
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" >
+
+
+
+ <label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
+ New API
+ <span class="md-nav__icon md-icon"></span>
+ </label>
+
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
+ <label class="md-nav__title" for="__nav_4_4">
+ <span class="md-nav__icon md-icon"></span>
+ New API
+ </label>
+ <ul class="md-nav__list" data-md-scrollfix>
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../javascript/new-api_writing-a-module/" class="md-nav__link">
+ Writing a module
</a>
</li>
- <li class="md-nav__item">
- <a href="../../javascript/helper-functions/" class="md-nav__link">
- Helper Functions
- </a>
- </li>
-
-
-
-
-
-
-
-
-
<li class="md-nav__item">
<a href="../../javascript/code-snippets/" class="md-nav__link">
Code Snippets
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5" type="checkbox" id="__nav_5" checked>
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
+
- <label class="md-nav__link" for="__nav_5">
+ <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
Package Components
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Package Components" data-md-level="1">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Package Components
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_5_2" type="checkbox" id="__nav_5_2" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
- <label class="md-nav__link" for="__nav_5_2">
+
+ <label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
PIPs
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="PIPs" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
PIPs
<li class="md-nav__item md-nav__item--active">
- <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
+ <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6" type="checkbox" id="__nav_6" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
+
- <label class="md-nav__link" for="__nav_6">
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
Migration
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Migration" data-md-level="1">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Migration
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_1" type="checkbox" id="__nav_6_1" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_1" >
+
- <label class="md-nav__link" for="__nav_6_1">
+ <label class="md-nav__link" for="__nav_6_1" id="__nav_6_1_label" tabindex="0">
From WoltLab Suite 5.5
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WoltLab Suite 5.5" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_1">
<span class="md-nav__icon md-icon"></span>
From WoltLab Suite 5.5
+ <li class="md-nav__item">
+ <a href="../../migration/wsc55/icons/" class="md-nav__link">
+ Icons
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
+ <li class="md-nav__item">
+ <a href="../../migration/wsc55/dialogs/" class="md-nav__link">
+ Dialogs
+ </a>
+ </li>
+
+
+
+
+
+
+
+
+
<li class="md-nav__item">
<a href="../../migration/wsc55/libraries/" class="md-nav__link">
Third Party Libraries
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_2" type="checkbox" id="__nav_6_2" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" >
- <label class="md-nav__link" for="__nav_6_2">
+
+ <label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
From WoltLab Suite 5.4
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WoltLab Suite 5.4" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_2">
<span class="md-nav__icon md-icon"></span>
From WoltLab Suite 5.4
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_3" type="checkbox" id="__nav_6_3" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_3" >
+
- <label class="md-nav__link" for="__nav_6_3">
+ <label class="md-nav__link" for="__nav_6_3" id="__nav_6_3_label" tabindex="0">
From WoltLab Suite 5.3
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WoltLab Suite 5.3" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_3">
<span class="md-nav__icon md-icon"></span>
From WoltLab Suite 5.3
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_4" type="checkbox" id="__nav_6_4" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_4" >
+
- <label class="md-nav__link" for="__nav_6_4">
+ <label class="md-nav__link" for="__nav_6_4" id="__nav_6_4_label" tabindex="0">
From WoltLab Suite 5.2
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WoltLab Suite 5.2" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_4">
<span class="md-nav__icon md-icon"></span>
From WoltLab Suite 5.2
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_5" type="checkbox" id="__nav_6_5" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_5" >
- <label class="md-nav__link" for="__nav_6_5">
+
+ <label class="md-nav__link" for="__nav_6_5" id="__nav_6_5_label" tabindex="0">
From WoltLab Suite 3.1
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WoltLab Suite 3.1" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_5">
<span class="md-nav__icon md-icon"></span>
From WoltLab Suite 3.1
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_6" type="checkbox" id="__nav_6_6" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_6" >
+
- <label class="md-nav__link" for="__nav_6_6">
+ <label class="md-nav__link" for="__nav_6_6" id="__nav_6_6_label" tabindex="0">
From WoltLab Suite 3.0
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WoltLab Suite 3.0" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_6">
<span class="md-nav__icon md-icon"></span>
From WoltLab Suite 3.0
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_6_7" type="checkbox" id="__nav_6_7" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_7" >
- <label class="md-nav__link" for="__nav_6_7">
+
+ <label class="md-nav__link" for="__nav_6_7" id="__nav_6_7_label" tabindex="0">
From WCF 2.1
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="From WCF 2.1" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_7">
<span class="md-nav__icon md-icon"></span>
From WCF 2.1
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7" type="checkbox" id="__nav_7" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
+
- <label class="md-nav__link" for="__nav_7">
+ <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
Tutorials
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Tutorials" data-md-level="1">
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
Tutorials
<li class="md-nav__item md-nav__item--nested">
- <input class="md-nav__toggle md-toggle" data-md-toggle="__nav_7_1" type="checkbox" id="__nav_7_1" >
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1" >
- <label class="md-nav__link" for="__nav_7_1">
+
+ <label class="md-nav__link" for="__nav_7_1" id="__nav_7_1_label" tabindex="0">
Tutorial Series
<span class="md-nav__icon md-icon"></span>
</label>
- <nav class="md-nav" aria-label="Tutorial Series" data-md-level="2">
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7_1">
<span class="md-nav__icon md-icon"></span>
Tutorial Series
</div>
- <div class="md-content" data-md-component="content">
- <article class="md-content__inner md-typeset">
-
+
+ <div class="md-content" data-md-component="content">
+ <article class="md-content__inner md-typeset">
- <a href="https://github.com/WoltLab/docs.woltlab.com/edit/6.0/docs/package/database-php-api.md" title="Edit this page" class="md-content__button md-icon">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25Z"/></svg>
- </a>
+
+
+
<h1 id="database-php-api">Database PHP API<a class="headerlink" href="#database-php-api" title="Permanent link">#</a></h1>
<p>While the <a href="../pip/sql/">sql</a> package installation plugin supports adding and removing tables, columns, and indices, it is not able to handle cases where the added table, column, or index already exist.
-We have added a new PHP-based API to manipulate the database scheme which can be used in combination with the <a href="../pip/script/">script</a> package installation plugin that skips parts that already exist:</p>
-<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
-<span class="normal"> 2</span>
-<span class="normal"> 3</span>
-<span class="normal"> 4</span>
-<span class="normal"> 5</span>
-<span class="normal"> 6</span>
-<span class="normal"> 7</span>
-<span class="normal"> 8</span>
-<span class="normal"> 9</span>
-<span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nv">$tables</span> <span class="o">=</span> <span class="p">[</span>
- <span class="c1">// list of `DatabaseTable` objects</span>
-<span class="p">];</span>
-
-<span class="p">(</span><span class="k">new</span> <span class="nx">DatabaseTableChangeProcessor</span><span class="p">(</span>
- <span class="sd">/** @var ScriptPackageInstallationPlugin $this */</span>
- <span class="nv">$this</span><span class="o">-></span><span class="na">installation</span><span class="o">-></span><span class="na">getPackage</span><span class="p">(),</span>
- <span class="nv">$tables</span><span class="p">,</span>
- <span class="nx">WCF</span><span class="o">::</span><span class="na">getDB</span><span class="p">()</span><span class="o">-></span><span class="na">getEditor</span><span class="p">())</span>
-<span class="p">)</span><span class="o">-></span><span class="na">process</span><span class="p">();</span>
-</code></pre></div></td></tr></table></div>
-<p>All of the relevant components can be found in the <code>wcf\system\database\table</code> namespace.</p>
-<p>With WoltLab Suite 5.4, you should use the new <a href="../pip/database/">database</a> package installation plugin for which you only have to return the array of affected database tables:</p>
+We have added a new PHP-based API to manipulate the database scheme which can be used in combination with the <a href="../pip/database/">database</a> package installation plugin that skips parts that already exist:</p>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">return</span> <span class="p">[</span>
<span class="c1">// list of `DatabaseTable` objects</span>
<span class="p">];</span>
</code></pre></div></td></tr></table></div>
+<p>All of the relevant components can be found in the <code>wcf\system\database\table</code> namespace.</p>
<h2 id="database-tables">Database Tables<a class="headerlink" href="#database-tables" title="Permanent link">#</a></h2>
<p>There are two classes representing database tables: <code>DatabaseTable</code> and <code>PartialDatabaseTable</code>.
If a new table should be created, use <code>DatabaseTable</code>.
<p>Additionally, there are some additionally classes of commonly used columns with specific properties:</p>
<ul>
<li><code>DefaultFalseBooleanDatabaseTableColumn</code> (a <code>tinyint</code> column with length <code>1</code>, default value <code>0</code> and whose values cannot be <code>null</code>)</li>
-<li><code>DefaultTrueBooleanDatabaseTableColumn</code> (a <code>tinyint</code> column with length <code>0</code>, default value <code>0</code> and whose values cannot be <code>null</code>)</li>
+<li><code>DefaultTrueBooleanDatabaseTableColumn</code> (a <code>tinyint</code> column with length <code>1</code>, default value <code>1</code> and whose values cannot be <code>null</code>)</li>
<li><code>NotNullInt10DatabaseTableColumn</code> (a <code>int</code> column with length <code>10</code> and whose values cannot be <code>null</code>)</li>
<li><code>NotNullVarchar191DatabaseTableColumn</code> (a <code>varchar</code> column with length <code>191</code> and whose values cannot be <code>null</code>)</li>
<li><code>NotNullVarchar255DatabaseTableColumn</code> (a <code>varchar</code> column with length <code>255</code> and whose values cannot be <code>null</code>)</li>
<p>Indices are represented by <code>DatabaseTableIndex</code> objects: </p>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
<span class="normal">2</span>
-<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nx">DatabaseTableIndex</span><span class="o">::</span><span class="na">create</span><span class="p">()</span>
+<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="nx">DatabaseTableIndex</span><span class="o">::</span><span class="na">create</span><span class="p">(</span><span class="s1">'fooID'</span><span class="p">)</span>
<span class="o">-></span><span class="na">type</span><span class="p">(</span><span class="nx">DatabaseTableIndex</span><span class="o">::</span><span class="na">UNIQUE_TYPE</span><span class="p">)</span>
<span class="o">-></span><span class="na">columns</span><span class="p">([</span><span class="s1">'fooID'</span><span class="p">])</span>
</code></pre></div></td></tr></table></div>
<p>There are four different types: <code>DatabaseTableIndex::DEFAULT_TYPE</code> (default), <code>DatabaseTableIndex::PRIMARY_TYPE</code>, <code>DatabaseTableIndex::UNIQUE_TYPE</code>, and <code>DatabaseTableIndex::FULLTEXT_TYPE</code>.
For primary keys, there is also the <code>DatabaseTablePrimaryIndex</code> class which automatically sets the type to <code>DatabaseTableIndex::PRIMARY_TYPE</code>.
To drop a index, all of the relevant data to create the index has to be present and the <code>drop()</code> method has to be called.</p>
-<p><code>DatabaseTableIndex::create()</code> also supports the index name as a parameter.
-If it is not present, <code>DatabaseTable::indices()</code> will automatically set one based on the index data.</p>
+<p>The index name is specified as the parameter to <code>DatabaseTableIndex::create()</code>.
+It is strongly recommended to specify an explicit name (<a href="https://github.com/WoltLab/WCF/issues/4505">WoltLab/WCF#4505</a>).
+If no name is given, <code>DatabaseTable::indices()</code> will automatically set one based on the index data.</p>
<hr>
<div class="md-source-file">
<small>
Last update:
- 2021-10-20
+ 2023-03-27
</small>
</div>
-
- </article>
-
- </div>
+
+
+ </article>
+ </div>
+
+
</div>
</main>
<footer class="md-footer">
-
- <nav class="md-footer__inner md-grid" aria-label="Footer" >
-
-
- <a href="../pip/user-profile-menu/" class="md-footer__link md-footer__link--prev" aria-label="Previous: userProfileMenu" rel="prev">
- <div class="md-footer__button md-icon">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
- </div>
- <div class="md-footer__title">
- <div class="md-ellipsis">
- <span class="md-footer__direction">
- Previous
- </span>
- userProfileMenu
- </div>
- </div>
- </a>
-
-
-
- <a href="../../migration/wsc55/php/" class="md-footer__link md-footer__link--next" aria-label="Next: PHP API" rel="next">
- <div class="md-footer__title">
- <div class="md-ellipsis">
- <span class="md-footer__direction">
- Next
- </span>
- PHP API
- </div>
- </div>
- <div class="md-footer__button md-icon">
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
- </div>
- </a>
-
- </nav>
-
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-dialog__inner md-typeset"></div>
</div>
- <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tracking"], "search": "../../assets/javascripts/workers/search.ecf98df9.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.config.lang": "en", "search.config.pipeline": "trimmer, stopWordFilter", "search.config.separator": "[\\s\\-]+", "search.placeholder": "Search", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version.title": "Select version"}, "version": {"provider": "mike"}}</script>
+ <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.tracking"], "search": "../../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"provider": "mike"}}</script>
- <script src="../../assets/javascripts/bundle.9c69f0bc.min.js"></script>
+ <script src="../../assets/javascripts/bundle.b425cdc4.min.js"></script>
</body>