{"id":7821,"date":"2021-06-19T12:27:29","date_gmt":"2021-06-19T10:27:29","guid":{"rendered":"http:\/\/blog.via-internet.de\/?p=7821"},"modified":"2022-02-09T19:18:53","modified_gmt":"2022-02-09T18:18:53","slug":"laravel-tutorial-extend-user-model","status":"publish","type":"post","link":"https:\/\/via-internet.de\/blog\/2021\/06\/19\/laravel-tutorial-extend-user-model\/","title":{"rendered":"Laravel | Benutzermodel erweitern"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Laravel bietet mit <a href=\"https:\/\/laravel.com\/docs\/8.x\/eloquent\" data-type=\"URL\" data-id=\"https:\/\/laravel.com\/docs\/8.x\/eloquent\" target=\"_blank\" rel=\"noreferrer noopener\">Eloquent ORM<\/a> ein leistungsf\u00e4higes Datenbank-Framework.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mit Hilfe von Modellen werden die Datenbankobjekte (z. B. Benutzer) definiert. Diese Objekte k\u00f6nnen dabei einfach durch zus\u00e4tzliche Felder erweitert werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Im nachfolgenden Beispiel wollen wir das vorhandene Objekt <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">User <\/code>einer initialen Laravel-Installation durch ein Feld <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">username<\/code> erweitern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"neues-feld-den-benutzermodel-hinzufugen\">Neues Feld den Benutzermodel hinzuf\u00fcgen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen eines Datenbank-Migrationsskriptes, das unser gew\u00fcnschtes Feld zur Tabelle <code data-enlighter-language=\"raw\" class=\"EnlighterJSRAW\">users<\/code> hinzuf\u00fcgt.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">php artisan make:migration add_column_username_to_users_table --table users<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hinzuf\u00fcgen des Felder <em>Username<\/em> in der neu erstellten Datei. Dies liegt unter <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">database\/migrations.<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"4\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->string('username')->nullable();\n        });\n    }\n\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            $table->dropColumn('username');\n        });\n    }<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Hinzuf\u00fcgen des Feldes <em>Username <\/em>im Datenbankmodel <em>User<\/em> in der Datei app\\Models\\User.php<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"5\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    protected $fillable = [\n        'name',\n        'email',\n        'password',\n        'username'\n    ];<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"datenbank-aktualisieren\">Datenbank aktualisieren. <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Schritt entfernt alle Tabellen und erstellt sie neu. Dadurch gehen nat\u00fcrlich alle bereits vorhandenen Daten verloren!<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"1\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u276f php artisan migrate:fresh --seed\nDropped all tables successfully.\nMigration table created successfully.\nMigrating: 2014_10_12_000000_create_users_table\nMigrated:  2014_10_12_000000_create_users_table (2,326.47ms)\nMigrating: 2014_10_12_100000_create_password_resets_table\nMigrated:  2014_10_12_100000_create_password_resets_table (1,789.28ms)\nMigrating: 2014_10_12_200000_add_two_factor_columns_to_users_table\nMigrated:  2014_10_12_200000_add_two_factor_columns_to_users_table (1,010.74ms)\nMigrating: 2019_08_19_000000_create_failed_jobs_table\nMigrated:  2019_08_19_000000_create_failed_jobs_table (2,399.99ms)\nMigrating: 2019_12_14_000001_create_personal_access_tokens_table\nMigrated:  2019_12_14_000001_create_personal_access_tokens_table (2,313.60ms)\nMigrating: 2021_06_19_085151_create_sessions_table\nMigrated:  2021_06_19_085151_create_sessions_table (5,279.76ms)\nMigrating: 2021_06_19_102316_add_username_to_users_table\nMigrated:  2021_06_19_102316_add_username_to_users_table (432.59ms)\nDatabase seeding completed successfully.<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"erweitern-der-frontend-views\">Erweitern der Frontend Views<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Hinzuf\u00fcgen des Feldes <em>Username <\/em>in der Datei resources\\views\\profile\\edit.blade.php<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"7-12\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;x-slot name=\"form\">\n   ...\n\n   &lt;!-- Email -->\n      ...\n\n\n   &lt;!-- column username -->\n   &lt;div class=\"form-group row\">\n      &lt;label for=\"username\" class=\"col-md-4 col-form-label text-md-right\">{{ __('Benutzername') }}&lt;\/label>\n\n      &lt;div class=\"col-md-6\">\n         &lt;input id=\"username\" \n               type=\"text\" \n               class=\"form-control @error('username') is-invalid @enderror\" name=\"email\" \n               value=\"{{ old('email') ?? auth()->user()->email }}\" \n               required autocomplete=\"email\" autofocus>\n\n          @error('username')\n          &lt;span class=\"invalid-feedback\" role=\"alert\">\n             &lt;strong>{{ $message }}&lt;\/strong>\n          &lt;\/span>\n          @enderror\n       &lt;\/div>\n    &lt;\/div>\n &lt;\/x-slot><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"anpassen-des-controllers\">Anpassen des Controllers<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wir passen die PHP Komponente <code>UpdateUserProfileInformation <\/code>an, so das die neuen Werte gespeichert werden<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">app\\Actions\\Fortify\\UpdateUserProfileInformation.php<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"php\" data-enlighter-theme=\"\" data-enlighter-highlight=\"12\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">    public function update($user, array $input)\n    {\n        ...\n\n        if ($input['email'] !== $user->email &amp;&amp;\n            $user instanceof MustVerifyEmail) {\n            $this->updateVerifiedUser($user, $input);\n        } else {\n            $user->forceFill([\n                'name' => $input['name'],\n                'email' => $input['email'],\n                'username' => $input['username'],\n            ])->save();\n        }\n    }<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Laravel bietet mit Eloquent ORM ein leistungsf\u00e4higes Datenbank-Framework. Mit Hilfe von Modellen werden die Datenbankobjekte (z. B. Benutzer) definiert. Diese Objekte k\u00f6nnen dabei einfach durch zus\u00e4tzliche Felder erweitert werden. Im nachfolgenden Beispiel wollen wir das vorhandene Objekt User einer initialen Laravel-Installation durch ein Feld username erweitern. Neues Feld den Benutzermodel hinzuf\u00fcgen Erstellen eines Datenbank-Migrationsskriptes, das unser gew\u00fcnschtes Feld zur Tabelle users hinzuf\u00fcgt. Hinzuf\u00fcgen des Felder Username in der neu erstellten Datei. Dies liegt unter database\/migrations. Hinzuf\u00fcgen des Feldes Username im Datenbankmodel User in der Datei app\\Models\\User.php Datenbank aktualisieren. Dieser Schritt entfernt alle Tabellen und erstellt sie neu. Dadurch gehen nat\u00fcrlich alle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":7834,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[99,57],"tags":[],"class_list":["post-7821","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","category-php"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/7821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/comments?post=7821"}],"version-history":[{"count":3,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/7821\/revisions"}],"predecessor-version":[{"id":8671,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/7821\/revisions\/8671"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/"}],"wp:attachment":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media?parent=7821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/categories?post=7821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/tags?post=7821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}