{"id":52565,"date":"2022-07-20T08:36:09","date_gmt":"2022-07-20T07:36:09","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=52565&#038;post_type=knowledgebase&#038;preview_id=52565"},"modified":"2025-10-01T20:18:09","modified_gmt":"2025-10-01T19:18:09","slug":"laravel-datenbank","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/","title":{"rendered":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt"},"content":{"rendered":"<p>Probleme mit der Datengenauigkeit und -konsistenz k\u00f6nnen von kleinen Unannehmlichkeiten bis hin zu gro\u00dfen Problemen f\u00fcr das Unternehmen f\u00fchren. Es ist wichtig, einen Code zu entwickeln, der die Daten in deiner Datenbank sicher speichert, \u00e4ndert und l\u00f6scht.<\/p>\n<p>Das sind die Laravel-Datenbanktransaktionen.<\/p>\n<p>Datenbanktransaktionen sind ein effektiver Ansatz, um die Datenintegrit\u00e4t zu gew\u00e4hrleisten.<span style=\"font-family: Roboto, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;font-size: 1rem\">Laravel vereinfacht diese Transaktionen f\u00fcr eine Vielzahl von Datenbanken.<\/span><\/p>\n<p>Aber was genau sind sie? Wie kannst du sie in Laravel bearbeiten?<\/p>\n\n<p>Am Ende dieses ausf\u00fchrlichen Leitfadens wirst du alles \u00fcber Datenbanktransaktionen in Laravel gelernt haben und wie du sie in deinem Projekt effektiv einsetzen kannst.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was sind Laravel-Datenbanktransaktionen?<\/h2>\n<p>Bevor wir uns mit der technischen Seite besch\u00e4ftigen, wollen wir erst einmal verstehen, was <a href=\"https:\/\/kinsta.com\/de\/blog\/open-source-database\/\" rel=\"noopener\">Laravel-Datenbanktransaktionen<\/a> sind und wie du von ihnen profitieren kannst.<\/p>\n<p>Eine Datenbanktransaktion ist eine Reihe von Vorg\u00e4ngen, die du sicher innerhalb der Datenbankstruktur deiner Anwendung durchf\u00fchren kannst, z. B. SQL-Abfragen zur \u00c4nderung von Daten (z. B. Aktualisierungen, L\u00f6schungen und Einf\u00fcgungen).<\/p>\n<p>Du kannst jederzeit entscheiden, ob du alle Abfragen der Transaktion zur\u00fccknehmen willst. Au\u00dferdem werden alle Abfragen, die du machst, von der Datenbank als eine einzelne Aktion behandelt.<\/p>\n<p>Schauen wir uns ein Beispiel daf\u00fcr an.<\/p>\n<p>Nehmen wir an, wir haben eine App, mit der Nutzer Konten erstellen k\u00f6nnen. Nat\u00fcrlich kann jedes Konto mit einem oder mehreren Nutzern verkn\u00fcpft sein. Wenn diese App gleichzeitig ein Konto und den ersten Nutzer erstellt, musst du dich damit befassen, was passiert, wenn ein Konto richtig erstellt wird, der Nutzer aber nicht.<\/p>\n<p>Sieh dir diesen Beispielcode an:<\/p>\n<pre><code class=\"language-php\">\/\/ Create Account\n$newAcct = Account::create([\n  'accountname' =&gt; Input::get('accountname'),\n]);\n\n\/\/ Create User\n$newUser = User::create([\n  'username' =&gt; Input::get('username'),\n  'account_id' =&gt; $newAcct-&gt;id,\n]);<\/code><\/pre>\n<p>Hier gibt es zwei Szenarien, die unangenehme Probleme verursachen k\u00f6nnen:<\/p>\n<ol>\n<li>Konto wird nicht erstellt<\/li>\n<li>Fehler bei der Erstellung eines Benutzers<\/li>\n<\/ol>\n<p>Betrachten wir die letzte Situation.<\/p>\n<p>Ein Konto ohne verf\u00fcgbare Benutzer f\u00fchrt zu Dateninkonsistenzen in der Datenbank. Um dies zu beheben, kannst du entweder eine Menge Code einsparen oder es einfach in eine Transaktion verpacken, um die Sache schnell zu erledigen.<\/p>\n<p>Datenbanktransaktionen gibt es zwar in den meisten SQL-Datenbanken, sie unterscheiden sich aber vor allem in ihrer Umsetzung und Effizienz. Beliebte Systeme wie <a href=\"https:\/\/kinsta.com\/de\/blog\/mysql-performance-tune\/\" rel=\"noopener\">MySQL<\/a>, SQLite, <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-postgresql\/\" rel=\"noopener\">PostgreSQL<\/a> und Oracle unterst\u00fctzen Transaktionen, sodass du keine Probleme haben solltest, deine bevorzugte SQL-Datenbank einzusetzen.<\/p>\n<h3>Migrationen<\/h3>\n<p>Migration ist eine wichtige Funktion in <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-laravel\/\" rel=\"noopener\">Laravel<\/a>, die es dir erm\u00f6glicht, eine Tabelle in deiner Datenbank zu erstellen, \u00c4nderungen vorzunehmen und das Datenbankschema der Anwendung zu teilen. Du kannst Laravel-Migrationen nutzen, um Tabellen zu bearbeiten, indem du neue Spalten hinzuf\u00fcgst oder bestehende entfernst.<\/p>\n<p>Angenommen, du <a href=\"https:\/\/kinsta.com\/de\/blog\/slack-vs-discord\/\" rel=\"noopener\">besprichst Ideen mit einem Team<\/a> und musst Anpassungen an der Tabelle vornehmen. Die SQL-Datei muss geteilt und von jemandem im Team importiert werden. Es ist m\u00f6glich, dass sie vergessen, die SQL-Datei zu importieren, was zu Problemen im Betrieb der Anwendung f\u00fchrt.<\/p>\n<p>An dieser Stelle kommt die Laravel-Migration zur Rettung. Du kannst eine neue Spalte zu deiner Datenbank hinzuf\u00fcgen oder Eintr\u00e4ge l\u00f6schen, ohne dass sich das auf die bereits vorhandenen auswirkt.<\/p>\n<h3>Seeders<\/h3>\n<p>Seeding ist ein Tool, das <a href=\"https:\/\/kinsta.com\/de\/blog\/laravel-9\/\" rel=\"noopener\">Laravel<\/a> Entwicklern zur Verf\u00fcgung stellt, um das Testen verschiedener Datentypen zu erleichtern, Fehler zu beheben und die Leistung zu optimieren. Mit dem Datenbank-Seeder kannst du deiner Datenbanktabelle mit einem einzigen Befehl automatisch mehrere Zeilen mit Dummy-Daten hinzuf\u00fcgen.<\/p>\n<p>So kannst du mit einer neuen Datenbank und Beispielwerten beginnen, anstatt sie jedes Mal manuell eingeben zu m\u00fcssen, wenn die Datenbank wiederhergestellt wird.<\/p>\n<h2>Optionen f\u00fcr Laravel-Datenbanktransaktionen<\/h2>\n<p>Laravel bietet verschiedene Werkzeuge, um deine Daten wie <a href=\"https:\/\/kinsta.com\/de\/blog\/adminer\/\" rel=\"noopener\">Adminer<\/a> zu verwalten. F\u00fcr Datenbanktransaktionen gibt es auf der Datenbankseite drei Methoden, um eine Transaktion manuell zu starten und die volle Kontrolle \u00fcber die Transaktionsverwaltung zu haben.<\/p>\n<p>Viele Nutzer finden diese Optionen flexibler, um genau festzulegen, wann eine Transaktion best\u00e4tigt oder zur\u00fcckgenommen werden soll:<\/p>\n<ul>\n<li><strong>Erstelle eine Transaktion:<\/strong> Verwende den Befehl <code>DB::beginTransaction();<\/code>, um eine Transaktion zu starten.<\/li>\n<li><strong>Eine Transaktion r\u00fcckg\u00e4ngig machen:<\/strong> Verwende den Befehl <code>DB::rollBack();<\/code>, wenn du \u00c4nderungen vornehmen oder Aktionen r\u00fcckg\u00e4ngig machen willst.<\/li>\n<li><strong>Best\u00e4tige eine Transaktion:<\/strong> Wenn alles wie geplant gelaufen ist, verwende den Befehl <code>DB::commit();<\/code>.<\/li>\n<\/ul>\n<p>Denke immer daran, jede offene Transaktion mit einer Commit- oder Rollback-Aktion abzuschlie\u00dfen, insbesondere bei Schleifen. Andernfalls wird diese manuelle Methode nicht mehr synchronisiert und deine Datens\u00e4tze werden nicht aktualisiert.<\/p>\n<h2>Wie du mit deiner Laravel-Datenbank arbeitest<\/h2>\n<p>Migrationen und Seeder sind, wie bereits erw\u00e4hnt, ausgekl\u00fcgelte L\u00f6sungen f\u00fcr <a href=\"https:\/\/kinsta.com\/de\/blog\/laravel-entwickler-gehalt\/\" rel=\"noopener\">Laravel-Entwickler<\/a>, um die Datenbank einer Anwendung schnell bereitzustellen, zu l\u00f6schen und wiederherzustellen, indem sie Unstimmigkeiten reduzieren. Das ist besonders praktisch, wenn mehrere Entwickler an derselben Anwendung arbeiten.<\/p>\n<p>In diesem Abschnitt erf\u00e4hrst du, wie du Migrationen und Seeder mithilfe von artisan-Befehlen ganz einfach mit deiner Laravel-Datenbank nutzen kannst.<\/p>\n<h3>Voraussetzungen<\/h3>\n<p>Das brauchst du, um loszulegen:<\/p>\n<ol>\n<li>Ein Nicht-Root-Benutzer mit sudo-Rechten auf einem lokalen Ubuntu 18.04-Computer oder Entwicklungsserver. Es ist ratsam, eine <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-eine-firewall\/\" rel=\"noopener\">aktive Firewall einzurichten<\/a>, wenn du einen Remote-Server verwendest.<\/li>\n<li>LEMP ist auf deinem Rechner installiert. Du kannst auch Docker und Docker Compose installieren, um deine Anwendung auszuf\u00fchren, wenn du dich bei der Arbeit damit wohler f\u00fchlst.<\/li>\n<\/ol>\n<p>Unser <a href=\"https:\/\/kinsta.com\/de\/devkinsta\/\" rel=\"noopener\">DevKinsta-Tool<\/a> basiert auf Docker und wird von 60.000++ Entwicklern und Designern verwendet, um auf einfache Weise einzelne oder mehrere <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbank\/\" rel=\"noopener\">WordPress-Seiten<\/a> zu erstellen und zu entwickeln.<\/p>\n<p>Es gibt noch weitere <a href=\"https:\/\/kinsta.com\/de\/blog\/webentwicklung-tools\/\" rel=\"noopener\">Webentwicklungs-Tools<\/a>, die du je nach deinen F\u00e4higkeiten und Programmieranforderungen nutzen kannst.<\/p>\n<h3>Laravel Migrationen<\/h3>\n<p>Es gibt zwei Methoden in einer Migrationsklasse: up und down. Die Up-Methode wird verwendet, um neue Tabellen, Indizes oder Spalten in deiner Datenbank zu erstellen. Die Down-Methode soll die Auswirkungen der Up-Methode r\u00fcckg\u00e4ngig machen.<\/p>\n<p>Mit dem Laravel Schema-Builder kannst du in jeder dieser Methoden Tabellen frei erstellen und bearbeiten. Diese Migration erzeugt zum Beispiel eine Flugtabelle:<\/p>\n<pre><code class=\"language-php\">use IlluminateDatabaseMigrationsMigration;\nuse IlluminateDatabaseSchemaBlueprint;\nuse IlluminateSupportFacadesSchema;\n\nclass CreateFlightsTable extends Migration {\n\/**\n* Run the migrations.\n*\n* @return void\n*\/\n\npublic function up() {\n  Schema::create('flights', function (Blueprint $table) {\n    $table-&gt;bigIncrements('id');\n    $table-&gt;string('name');\n    $table-&gt;string('airline');\n    $table-&gt;timestamps();\n  });\n}\n\n\/**\n* Reverse the migrations.\n*\n* @return void\n*\/\n\npublic function down() {\n  Schema::drop('flights');\n}<\/code><\/pre>\n<p>Denke daran, dass die <code>make:migration<\/code> Befehle den Namen der Tabelle kl\u00e4ren m\u00fcssen. Vergewissere dich also, dass die <code>table_name<\/code> mit dem \u00fcbereinstimmt, was du willst.<\/p>\n<p>Mit den Optionen <code>--table<\/code> und <code>--create<\/code> kannst du den Tabellennamen angeben und festlegen, ob die Migration eine neue Tabelle erstellen soll (siehe unten):<\/p>\n<pre><code class=\"language-php\">php artisan make:migration create_users_table --create=users<\/code><\/pre>\n<pre><code class=\"language-php\">php artisan make:migration add_votes_to_users_table --table=users<\/code><\/pre>\n<p>Dein Verzeichnis <strong>database\/migrations<\/strong> enth\u00e4lt nun die neue Migration. Jeder Migrationsdateiname enth\u00e4lt einen Zeitstempel, den Laravel verwendet, um die Reihenfolge der Migration zu bestimmen.<\/p>\n<p>Du hast auch die M\u00f6glichkeit, ein <code>--path<\/code> zu definieren, das mit dem Stammverzeichnis deiner Installation verbunden sein sollte. Verwende den folgenden Befehl:<\/p>\n<pre><code class=\"language-php\">php artisan migrate:make foo --path=app\/migrations<\/code><\/pre>\n<h4>Migrationen ausf\u00fchren<\/h4>\n<p>Es gibt einige hilfreiche Befehle, die du bei der Durchf\u00fchrung von Migrationen nutzen kannst. Sehen wir uns ein paar davon an:<\/p>\n<ul>\n<li><strong><code>php artisan migrate<\/code>:<\/strong> Mit diesem Befehl wird dein gesamtes Schema in der Datenbank ver\u00f6ffentlicht. Er erzeugt au\u00dferdem eine Tabelle in der Datenbank.<\/li>\n<li><strong><code>php artisan migrate --path=app\/foo\/migrations<\/code>:<\/strong> Mit diesem Befehl werden alle Migrationen unter einem Verzeichnis ausgef\u00fchrt. Wenn du die Fehlermeldung &#8222;Nichts zu migrieren&#8220; erh\u00e4ltst, f\u00fchre den Befehl <code>php artisan migrate --path=database\/migrations\/foo<\/code> ohne das <strong>App-Verzeichnis<\/strong> aus.<\/li>\n<li><strong><code>php artisan migrate --package=vendor\/package<\/code>:<\/strong> Verwende diesen Befehl, wenn du Migrationen f\u00fcr ein Paket ausf\u00fchren willst.<\/li>\n<\/ul>\n<p>Manchmal bekommst du beim Ausf\u00fchren von Migrationen die Fehlermeldung &#8222;Klasse nicht gefunden&#8220;. Wenn das der Fall ist, f\u00fchre den Befehl <code>composer dump-autoload<\/code> aus.<\/p>\n<p>Manche Migrationen k\u00f6nnen gef\u00e4hrlich sein und zum Verlust deiner Daten f\u00fchren. Deshalb wird Laravel dich auffordern, die Ausf\u00fchrung von Befehlen zu best\u00e4tigen, um deine Daten zu sch\u00fctzen.<\/p>\n<p>Wenn du nicht gefragt werden m\u00f6chtest, kannst du die Befehle mit <code>--force flag<\/code> wie folgt erzwingen:<\/p>\n<pre><code class=\"language-php\">php artisan migrate --force<\/code><\/pre>\n<h4>Migrationen r\u00fcckg\u00e4ngig machen<\/h4>\n<p>Verwende den Rollback-Befehl, wenn du den letzten Migrationsstapel wie folgt r\u00fcckg\u00e4ngig machen willst:<\/p>\n<pre><code class=\"language-php\">php artisan migrate:rollback<\/code><\/pre>\n<p>Hier sind ein paar weitere Rollback-Befehle, die du verwenden kannst:<\/p>\n<ul>\n<li><strong><code>php artisan migrate:reset<\/code>:<\/strong> Dieser Befehl macht alle Migrationen r\u00fcckg\u00e4ngig, nicht nur die letzte Operation.<\/li>\n<li><strong><code>php artisan migrate:fresh<\/code>:<\/strong> Verwende diesen Befehl, wenn du eine neue Installation deiner Datenbank durchf\u00fchren willst. Er l\u00f6scht alle vorhandenen Tabellen und f\u00fchrt den Befehl <code>migration<\/code> aus.<\/li>\n<li><strong><code>php artisan migrate:refresh<\/code>:<\/strong> Dies ist ein Zwei-in-Eins-Befehl, der die beiden <code>:rollback and migrate<\/code> Befehle ausf\u00fchrt.<\/li>\n<li><strong><code>php artisan migrate:fresh --seed<\/code>:<\/strong> Er f\u00fchrt den Befehl <code>migrate:fresh<\/code> aus, bevor die Datenbank gef\u00fcttert wird. Wenn du die App auf einem neuen Rechner installierst, kannst du diesen Befehl verwenden, um die Datenbank zu seeden (d.h. Daten in die Datenbank hochzuladen).<\/li>\n<\/ul>\n<h3>Laravel Seeding<\/h3>\n<p>Ein Seeder ist eine Klasse, die Datenproben (Seeds) erstellt und in einer Datenbank platziert. Laravel bietet eine einfache Methode, um deine Datenbank mit Testdaten zu f\u00fcllen, indem du Seed-Klassen im Verzeichnis <strong>database\/seeds<\/strong> verwendest.<\/p>\n<p>Du kannst den Namen deiner Seed-Klassen frei w\u00e4hlen. Wir raten dir aber, dich an ein klares Namensmuster deiner Wahl zu halten, wie <em>UsersTableSeeder<\/em>. Danach wird standardm\u00e4\u00dfig eine <code>DatabaseSeeder<\/code> Klasse f\u00fcr dich erstellt.<\/p>\n<p>Hier ist ein Beispiel f\u00fcr eine Datenbank-Seed-Klasse in Laravel:<\/p>\n<pre><code class=\"language-php\">class DatabaseSeeder extends Seeder {\n  public function run() {\n    $this-&gt;call('UserTableSeeder');\n    $this-&gt;command-&gt;info('User table seeded!');\n  }\n}\nclass UserTableSeeder extends Seeder {\n  public function run() {\n    DB::table('users')-&gt;delete();\n    User::create(array('email' =&gt; 'foo@bar.com'));\n  }\n}<\/code><\/pre>\n<h4>Einen Seeder erstellen<\/h4>\n<p>Die Erstellung von Seedern ist kinderleicht. Du k\u00f6nntest es mit geschlossenen Augen machen (aber bitte nicht).<\/p>\n<p>F\u00fchre den Befehl <code>make:seeder<\/code> artisan aus, um einen Seeder zu erstellen. Das Verzeichnis <strong>database\/seeds<\/strong> enth\u00e4lt nun alle Seeder, die vom Framework erstellt wurden:<\/p>\n<pre><code class=\"language-php\">php artisan make:seeder UsersTableSeeder<\/code><\/pre>\n<p>Die Standardmethode einer Seederklasse ist run. Der Prozess findet statt, wenn du den <code>db:seed<\/code> artisan-Befehl anwendest. Mit der run-Funktion kannst du Daten auf jede beliebige Weise in deine Datenbank eingeben. Au\u00dferdem ist es durchaus m\u00f6glich, dass du Eloquent Model Factories oder Query Builder verwendest, um Daten manuell einzuf\u00fcgen.<\/p>\n<p>Trotzdem solltest du bedenken, dass beim Datenbank-Seeding der Schutz vor Massenzuweisungen automatisch deaktiviert wird.<\/p>\n<p>Im Folgenden werden wir \u00c4nderungen an der Basisklasse <code>DatabaseSeeder<\/code> vornehmen und eine Datenbankeinf\u00fcgeanweisung in die Run-Methode einf\u00fcgen:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse IlluminateDatabaseSeeder;\nuse IlluminateSupportFacadesDB;\nuse IlluminateSupportFacadesHash;\nuse IlluminateSupportStr;\n\nclass DatabaseSeeder extends Seeder {\n  \/**\n  * Run the database seeds.\n  *\n  * @return void\n  *\/\n  public function run() {\n    DB::table('users')-&gt;insert([\n      'name' =&gt; Str::random(10),\n      'email' =&gt; Str::random(10).'@gmail.com',\n      'password' =&gt; Hash::make('password'),\n    ]);\n  }\n}<\/code><\/pre>\n<p>Wenn du im Code der Run-Methode einen Hinweis auf Abh\u00e4ngigkeiten geben m\u00f6chtest, l\u00f6st der Laravel Service Container diese automatisch auf.<\/p>\n<p>Au\u00dferdem kannst du die Funktion <code>call<\/code> verwenden, um verschiedene Seed-Klassen von dieser Klasse aus auszuf\u00fchren und so die Seeding-Reihenfolge anzupassen. Du kannst dein Datenbank-Seeding auf verschiedene Dateien aufteilen und so sicherstellen, dass keine einzelne Seeder-Klasse \u00fcberm\u00e4\u00dfig expandiert.<\/p>\n<p>Gib den Namen der Seederklasse ein, die du verwenden m\u00f6chtest, wie unten gezeigt:<\/p>\n<pre><code class=\"language-php\">\/**\n* Run the database seeds.\n*\n* @return void\n*\/\npublic function run() {\n  $this-&gt;call([\n    UsersTableSeeder::class,\n    PostsTableSeeder::class,\n    CommentsTableSeeder::class,\n  ]);\n}<\/code><\/pre>\n<h4>Ausf\u00fchren von Seedern<\/h4>\n<p>Nachdem du deinen Seeder erstellt hast, musst du eventuell den Befehl <code>dump-autoload<\/code> verwenden, um den Autoloader von Composer neu zu erstellen:<\/p>\n<pre><code class=\"language-php\">composer dump-autoload<\/code><\/pre>\n<p>Als N\u00e4chstes musst du den Befehl <code>db:seed<\/code> artisan ausf\u00fchren, um deine Datenbank zu seeden:<\/p>\n<pre><code class=\"language-php\">php artisan db:seed<\/code><\/pre>\n<p>Dieser Befehl f\u00fchrt die Klasse <code>DatabaseSeeder<\/code> stellvertretend aus, die f\u00fcr die Ausf\u00fchrung anderer Seed-Klassen verwendet werden kann. Du kannst jedoch den Parameter <code>--class<\/code> verwenden, um eine bestimmte Seederklasse separat auszuf\u00fchren, wie folgt:<\/p>\n<pre><code class=\"language-php\">php artisan db:seed --class=UserTableSeeder<\/code><\/pre>\n<p>Was ist, wenn du deine Datenbank von Grund auf neu erstellen m\u00f6chtest, indem du alle Tabellen l\u00f6schst und alle Migrationen noch einmal ausf\u00fchrst? In diesem Fall verwendest du den Befehl <code>migrate:fresh<\/code>, um deine Datenbank zu seeden.<\/p>\n<pre><code class=\"language-php\">php artisan migrate:fresh --seed<\/code><\/pre>\n<p>Wie bei den Migrationen k\u00f6nnen einige Seeding-Prozesse zu Datenverlusten oder unerw\u00fcnschten \u00c4nderungen f\u00fchren. Aus diesem Grund wirst du vor der Ausf\u00fchrung der Seeder zur Zustimmung aufgefordert, um dich davor zu sch\u00fctzen, dass du Seeding-Befehle auf deiner prim\u00e4ren Datenbank ausf\u00fchrst.<\/p>\n<p>Wenn du dir sicher bist und nicht durch diesen Sicherheitsschritt unterbrochen werden m\u00f6chtest, kannst du das <code>--force<\/code> Flag unten verwenden:<\/p>\n<pre><code class=\"language-php\">php artisan db:seed --force<\/code><\/pre>\n<h2>5 Weitere M\u00f6glichkeiten, rohe Datenbankabfragen in Laravel zu verwenden<\/h2>\n<p>Laravel bietet zwar praktische Tools wie Eloquent und Query Builder, aber du kannst auch einfache Abfragen mit SQL durchf\u00fchren. Wir haben f\u00fcnf verschiedene M\u00f6glichkeiten daf\u00fcr zusammengestellt.<\/p>\n<p>Aber bevor du anf\u00e4ngst, solltest du wissen, dass rohe Abfragen nicht automatisch gesichert sind, was sie zu einem riskanten Ansatz macht. Wenn du der Abfrage Parameter mitgibst, solltest du darauf achten, dass sie das richtige Format und die richtigen Werte haben, z. B. eine Zahl und keinen Text.<\/p>\n<h3>Avg\/Sum\/Count Berechnungen<\/h3>\n<p>Du kannst eine rohe Abfrage verwenden, wenn du <code>GROUP BY ()<\/code> erstellen willst, und dann <a href=\"https:\/\/kinsta.com\/de\/blog\/mongodb-vs-mysql\/\" rel=\"noopener\">MySQL-Aggregatfunktionen<\/a> wie <code>Count()<\/code>, <code>SUM()<\/code>, <code>AVG()<\/code>, <code>MIN()<\/code> oder <code>MAX()<\/code> verwenden, wie im folgenden Beispiel gezeigt:<\/p>\n<pre><code class=\"language-php\">$users = DB::table('users')\n  -&gt;selectRaw('count(*) as user_count, status')\n  -&gt;where('status', '&lt;&gt;', 1)\n  -&gt;groupBy('status')\n  -&gt;get();<\/code><\/pre>\n<p>Es ist sogar m\u00f6glich, sowohl <code>count()<\/code> als auch <code>avg()<\/code> in der gleichen SQL-Abfrage zu erstellen:<\/p>\n<pre><code class=\"language-php\">$salaries = DB::table('salaries')\n  -&gt;selectRaw('companies.name as company_name, avg(salary) as avg_salary, count(*) as people_count')\n  -&gt;join('companies', 'salaries.company_id', '=', 'companies.id')\n  -&gt;groupBy('companies.id')\n  -&gt;orderByDesc('avg_salary')\n  -&gt;get();<\/code><\/pre>\n<h3>Jahre filtern<\/h3>\n<p>Wenn du innerhalb von <code>GROUP BY<\/code> oder <code>ORDER BY<\/code> SQL-Berechnungen durchf\u00fchren musst, kannst du <code>groupByRaw()<\/code> und <code>orderByRaw()<\/code> Abfragen verwenden. Nach der Gruppierung kannst du auch die <code>where<\/code> Anweisung nutzen, indem du eine <code>having<\/code> SQL-Abfrage mit <code>havingRaw ()<\/code> verwendest.<\/p>\n<p>Der folgende Befehl zeigt zum Beispiel, wie du ein Datums-\/Zeitfeld nach Jahr gruppieren kannst:<\/p>\n<pre><code class=\"language-php\">$results = User::selectRaw('YEAR(birth_date) as year, COUNT(id) as amount')\n  -&gt;groupByRaw('YEAR(birth_date)')\n  -&gt;havingRaw('YEAR(birth_date) &gt; 2000')\n  -&gt;orderByRaw('YEAR(birth_date)')\n  -&gt;get();<\/code><\/pre>\n<h3>Berechnen eines einzelnen Feldes (Unterabfrage)<\/h3>\n<p>Angenommen, du m\u00f6chtest eine Spalte aus einer anderen berechnen und das Ergebnis in einer SQL-Abfrage zur\u00fcckgeben. Wie kannst du das machen?<\/p>\n<p>Schauen wir uns das mal an:<\/p>\n<pre><code class=\"language-php\">$products = Product::select('id', 'name')\n  -&gt;selectRaw('price - discount_price AS discount')\n  -&gt;get();<\/code><\/pre>\n<p>Hier ist ein weiteres Beispiel f\u00fcr eine SQL <code>CASE<\/code> Anweisung:<\/p>\n<pre><code class=\"language-php\">$users = DB::table('users')\n  -&gt;select('name', 'surname')\n  -&gt;selectRaw(\"(CASE WHEN (gender = 1) THEN 'M' ELSE 'F' END) as gender_text\")\n  -&gt;get();<\/code><\/pre>\n<h3>\u00c4lteres SQL konvertieren<\/h3>\n<p>Es kommt h\u00e4ufig vor, dass du eine SQL-Anweisung hast, die in Eloquent oder Query Builder konvertiert werden muss, vor allem aus einem alten Projekt, an dem du gearbeitet hast.<\/p>\n<p>Das musst du aber nicht tun. Stattdessen kannst du einfach die Anweisung <code>DB::select()<\/code> wie folgt verwenden:<\/p>\n<pre><code class=\"language-php\">$results = DB::select('select * from users where id=?', [1]);<\/code><\/pre>\n<h3>Abfrage ohne Ergebnisse ausf\u00fchren<\/h3>\n<p><code>DB::statement<\/code> kann eine SQL-Abfrage ausf\u00fchren und erh\u00e4lt keine Ergebnisse wie <code>INSERT<\/code> oder <code>UPDATE<\/code> ohne Variablen.<\/p>\n<p>Dies wird h\u00e4ufig bei der Datenbankmigration verwendet, wenn sich eine Tabellenstruktur \u00e4ndert und alte Daten mit den neuen ausgetauscht werden m\u00fcssen:<\/p>\n<pre><code class=\"language-php\">DB::statement('UPDATE users SET role_id = 1 WHERE role_id IS NULL AND YEAR(created_at) &gt; 2020');<\/code><\/pre>\n<p>Dar\u00fcber hinaus kann <code>DB::statement()<\/code> jede SQL-Abfrage mit einem Schema ausf\u00fchren, das nicht auf Werte oder Spalten beschr\u00e4nkt ist. Hier ist ein Beispiel:<\/p>\n<pre><code class=\"language-php\">DB::statement('DROP TABLE users');\nDB::statement('ALTER TABLE projects AUTO_INCREMENT=123');<\/code><\/pre>\n\n<h2>Zusammenfassung<\/h2>\n<p>Jetzt solltest du ein tiefes Verst\u00e4ndnis f\u00fcr Datenbanktransaktionen in Laravel und deren Implementierung haben. Sie helfen nicht nur bei der Datenintegrit\u00e4t, sondern auch dabei, <a href=\"https:\/\/kinsta.com\/de\/blog\/laravel-leistung\/\" rel=\"noopener\">die Leistung von Laravel zu optimieren<\/a> und deinen <a href=\"https:\/\/kinsta.com\/de\/blog\/laravel-tutorial\/\" rel=\"noopener\">Entwicklungsprozess<\/a> zu vereinfachen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Probleme mit der Datengenauigkeit und -konsistenz k\u00f6nnen von kleinen Unannehmlichkeiten bis hin zu gro\u00dfen Problemen f\u00fcr das Unternehmen f\u00fchren. Es ist wichtig, einen Code zu entwickeln, &#8230;<\/p>\n","protected":false},"author":255,"featured_media":52800,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[242,400,38,770],"topic":[958,969],"class_list":["post-52565","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-laravel","tag-php","tag-php-frameworks","topic-laravel","topic-php-frameworks"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt<\/title>\n<meta name=\"description\" content=\"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt\" \/>\n<meta property=\"og:description\" content=\"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-20T07:36:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:18:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mahitab Mostafa\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mahitab Mostafa\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\"},\"author\":{\"name\":\"Mahitab Mostafa\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58\"},\"headline\":\"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt\",\"datePublished\":\"2022-07-20T07:36:09+00:00\",\"dateModified\":\"2025-10-01T19:18:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\"},\"wordCount\":2169,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg\",\"keywords\":[\"database\",\"laravel\",\"php\",\"php frameworks\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\",\"name\":\"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg\",\"datePublished\":\"2022-07-20T07:36:09+00:00\",\"dateModified\":\"2025-10-01T19:18:09+00:00\",\"description\":\"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58\",\"name\":\"Mahitab Mostafa\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g\",\"caption\":\"Mahitab Mostafa\"},\"description\":\"Mahitab is a professional content writer, specializing in technology and cybersecurity. She has written hundreds of articles about WordPress, web hosting, and other related topics. She's a firm believer in the internet's role in the future of business.\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/mahitabmostafa\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt","description":"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/","og_locale":"de_DE","og_type":"article","og_title":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt","og_description":"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.","og_url":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2022-07-20T07:36:09+00:00","article_modified_time":"2025-10-01T19:18:09+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg","type":"image\/jpeg"}],"author":"Mahitab Mostafa","twitter_card":"summary_large_image","twitter_description":"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Mahitab Mostafa","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/"},"author":{"name":"Mahitab Mostafa","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58"},"headline":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt","datePublished":"2022-07-20T07:36:09+00:00","dateModified":"2025-10-01T19:18:09+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/"},"wordCount":2169,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg","keywords":["database","laravel","php","php frameworks"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/","url":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/","name":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg","datePublished":"2022-07-20T07:36:09+00:00","dateModified":"2025-10-01T19:18:09+00:00","description":"Willst du alles \u00fcber Datenbanktransaktionen in Laravel erfahren und wie du sie effektiv nutzen kannst? In der Kinsta Knowledge Base findest du die Antwort.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/07\/laravel-datenbank.jpeg","width":1460,"height":730,"caption":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/laravel-datenbank\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/de\/thema\/laravel\/"},{"@type":"ListItem","position":3,"name":"Laravel-Datenbanktransaktionen: Wie man sie effektiv implementiert und nutzt"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4dbde09b713b852c27568adce0f2bc58","name":"Mahitab Mostafa","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6456ca852177359ceabdff9d695558aa?s=96&d=mm&r=g","caption":"Mahitab Mostafa"},"description":"Mahitab is a professional content writer, specializing in technology and cybersecurity. She has written hundreds of articles about WordPress, web hosting, and other related topics. She's a firm believer in the internet's role in the future of business.","url":"https:\/\/kinsta.com\/de\/blog\/author\/mahitabmostafa\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/52565","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/255"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=52565"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/52565\/revisions"}],"predecessor-version":[{"id":52799,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/52565\/revisions\/52799"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/en"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/de"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/fr"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/es"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/it"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/translations\/jp"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/52565\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/52800"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=52565"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=52565"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=52565"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}