質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

2122閲覧

Laravel sailでテーブル・テストデータが生成できません。

ranerane0101

総合スコア70

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/08/10 09:15

編集2021/08/17 13:28

:環境 Windows WSL2 Ubuntu Laravel sail Laravelは8.x 起動コンテナは

Creating example-app_selenium_1 ... done Creating example-app_mailhog_1 ... done Creating example-app_meilisearch_1 ... done Creating example-app_mysql_1 ... done Creating example-app_redis_1 ... done Creating example-app_laravel.test_1 ... done
Class "app\Models\Task" not found at database/seeders/TasksTableSeeder.php:18 14▕ */ 15▕ public function run() 16▕ { 17▕ for ($i = 1; $i <= 10; $i++){ ➜ 18▕ Task::create([ 19▕ 'title' => 'title' . $i, 20▕ 'content'=> 'content' . $i, 21▕ 'person_in_charge'=>'person_in_charge' . $i, 22▕ ]);

https://qiita.com/minato-naka/items/0e709cb0e6628c82c1c5
このサイトをやっています。

sail artisan migrate --seedを実行したら上記のようなエラーが出てしまいました。参考サイトはsqliteで私はMySQLを利用しようとしています。
.env↓

APP_NAME=Laravel APP_ENV=local APP_KEY=base64:WtPq5taa9lKLsYIXXHuTkDO9Tr46AhI3mnj7jpFysm4= APP_DEBUG=true APP_URL=http://example-app.test LOG_CHANNEL=stack LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=自分のアプリ名 DB_USERNAME=sailデフォルト DB_PASSWORD=sailデフォルト

エラー該当の

TasksTableSeeder.php

1<?php 2 3namespace Database\Seeders; 4 5use app\Models\Task; 6use Illuminate\Database\Seeder; 7 8class TasksTableSeeder extends Seeder 9{ 10 /** 11 * Run the database seeds. 12 * 13 * 14 */ 15 public function run() 16 { 17 for ($i = 1; $i <= 10; $i++){ 18 Task::create([ 19 'title' => 'title' . $i, 20 'content'=> 'content' . $i, 21 'person_in_charge'=>'person_in_charge' . $i, 22 ]); 23 } 24 } 25} 26 27

DatabaseSeeder.php

1<?php 2 3namespace Database\Seeders; 4 5use app\Models\Task; 6use Illuminate\Database\Seeder; 7use Illuminate\Support\Facades\DB; 8 9 10class DatabaseSeeder extends Seeder 11{ 12 /** 13 * Seed the application's database. 14 * 15 * @return void 16 */ 17 public function run() 18 { 19 // \App\Models\User::factory(10)->create(); 20 $this->call(TasksTableSeeder::class); 21 } 22}

create_tasks_table.php

1<?php 2 3use Illuminate\Database\Migrations\Migration; 4use Illuminate\Database\Schema\Blueprint; 5use Illuminate\Support\Facades\Schema; 6 7class CreateTasksTable extends Migration 8{ 9 protected $connection = 'mysql'; 10 /** 11 * Run the migrations. 12 * 13 * @return void 14 */ 15 public function up() 16 { 17 Schema::connection('mysql')->create('tasks', function (Blueprint $table) { 18 $table->bigIncrements('id'); 19 $table->string('title', 100); 20 $table->string('content', 100); 21 $table->string('person_in_charge', 100); 22 $table->timestamps(); 23 }); 24 25 Schema::create('tasks', function(Blueprint $table){ 26 $table->engine = 'InnoDB'; 27 }); 28 29 Schema::create('tasks', function(Blueprint $table){ 30 $table->charset = 'utf8mb4'; 31 $table->collation = 'utf8mb4_unicode_ci'; 32 }); 33 } 34 35 /** 36 * Reverse the migrations. 37 * 38 * @return void 39 */ 40 public function down() 41 { 42 Schema::dropIfExists('tasks'); 43 } 44} 45

Task.php

1<?php 2 3namespace app\Models\Task; 4 5 6use Illuminate\Database\Eloquent\Model; 7 8 9class Task extends Model 10{ 11 protected $connection ='mysql'; 12 protected $fillable = [ 13 'title', 14 'content', 15 'person_in_charge', 16 ]; 17}

やったこと・分からないこと
・personがpesonになっていた誤字を修正
・Laravel8.xでの変更点かと思い

DatabaseSeeder.php

1use Illuminate\Support\Facades\DB; 2```を追記しました。 3 4・マイグレーションなのでhttps://readouble.com/laravel/8.x/ja/migrations.htmlを読みましたが、 5```ここに言語を入力 6/** 7 * マイグレーションが使用するデータベース接続 8 * 9 * @var string 10 */ 11protected $connection = 'pgsql'; 12 13/** 14 * マイグレーションの実行 15 * 16 * @return void 17 */ 18public function up() 19{ 20 // 21} 22

これをどのファイルに書けばいいのかが分かりません(これが解決法として正解かもわかりませんが)。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

namespace app\Models\Task;

appAppに直すだけで良いです
それに伴い他の箇所もappからAppにする必要がありますが

なぜそれで済むかは理由は省略しますが、appのまま動かすことも可能です
しかしわざわざそれをする理由がありません

投稿2021/08/21 02:05

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ranerane0101

2021/08/21 08:39

Class "App\Models\Task" not found at database/seeders/TasksTableSeeder.php:18 14▕ */ 15▕ public function run() 16▕ { 17▕ for ($i = 1; $i <= 10; $i++){ ➜ 18▕ Task::create([ 19▕ 'title' => 'title' . $i, 20▕ 'content'=> 'content' . $i, 21▕ 'person_in_charge'=>'person_in_charge' . $i, 22▕ ]); +7 vendor frames 8 database/seeders/DatabaseSeeder.php:20 Illuminate\Database\Seeder::call() +35 vendor frames 44 artisan:37 Illuminate\Foundation\Console\Kernel::handle() 回答ありがとうございます。appをAppに各ファイル変更しましたがこのようにエラーもappからAppに変わるだけでした。
hentaiman

2021/08/21 09:03

修正したらdump-autoloadしましょう
ranerane0101

2021/08/21 10:42

Class App\Models\Task\Task located in ./app/Models/Task.php does not comply with psr-4 autoloading standard. Skipping. > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi sail composer dump-autoloadとしたらこのerrorが出ました。この状態でsail artisan migrate --seedを再度実行しましたが同じエラーとなりました。何度もすみません。
hentaiman

2021/08/21 10:55

そのファイルのnamespaceがおかしいです -- namespace App\Models\Task; class Task extends Model{ -- と書いていると、App\Models\Task\Task; を指すことになります、が、そういう誤った記述を許さないようにcomposerがしてくれているので読み込めないようになってます namespace App\Models; に直しましょう
ranerane0101

2021/08/22 09:46

出来ました!本当にありがとうございました。名前空間について理解が出来ていませんでした。Task.phpをnamespace App\Models;に各Seeder.phpはこれはなめ空間ではありませんがuse App\Models\Task;にすること、そしてその後sail composer dump-autoloadとすることで解決出来ました。
hentaiman

2021/08/22 09:57

苦戦した原因はどちらかと言うとcomposerの理解不足ですが、artisanコマンドでファイルを作ればぶつかる事のない問題です artisan使わずに手書きでファイル作ったらnamespaceやディレクトリが不正な場合は動作しません 詳しく知りたければpsrで検索すれば良いと思いますが、先に書いた通りartisan使えばその辺はよしなにやってくれるので知らなくて良いと思います もしもライブラリを公開したくなった時はその時にpsr調べたら良いと思います
guest

0

Task::create([ 'title' => 'title', $i, 'content'=> 'content', $i, 'person_in_charge'=>'person_in_charge', $i, ]);

Task::create([ 'title' => 'title' . $i, 'content'=> 'content' . $i, 'person_in_charge'=>'person_in_charge' . $i, ]);

だと思います(','ではなく'.')。ただ、Class "App\Task" not foundなので、こことはまた別件の間違いがあるかもしれません。

投稿2021/08/10 09:26

AbeTakashi

総合スコア4853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ranerane0101

2021/08/14 14:33

回答ありがとうございます。誤字は直せました。ただやはりそれだけじゃないようです。 MySQL用の書き方や設定などを今確認しています。順次質問を編集してみようと思いますのでお時間あればお願い致します。
AbeTakashi

2021/08/14 15:51

気になるのはやはり Class "App\Task" not found ですよね。Task.phpがAppディレクトリ直下にあるか? ファイル名が間違っていないか?(Tasks.phpになってるとか) namespaceやClass名の宣言のところになにか不具合がないか?(全角スペースが紛れ込んでいる、など)はチェックした方がいいかもしれません。
ranerane0101

2021/08/15 13:05

回答ありがとうございます。結構公式ドキュメントを読んで大幅に変えたので再度よろしければ確認のほうよろしくお願い致します。すいません。
AbeTakashi

2021/08/15 17:21

うーん、なぞですね。use App\Models\Task; と書いてるのに Class "App\Task" not foundですもんね。たとえば該当する18行目を App\Models\Task::create([ と書き換えたらどうなるのでしょう。 それでも同じエラーがでるなら、Dockerの使い方が間違っているのかもしれません。書き換えてるつもりが書き換えてないみたいなパターンかも。Dockerの扱い方は問題ないでしょうか? とにかく、色んな方向からエラーを探ってみてください。質問文を読んだ限りではエラーの原因は見えません。
ranerane0101

2021/08/16 01:29

すいません。エラー文の方だけ書き直し出来ていませんでした。Class "App\Models\Task" not foundです。 Mysqlの使い方、構文などかもしれません。。参考サイトだとsqliteで空のファイルを作るのですが、自分はMysqlなので使っていません。これは問題ないでしょうか? App\Models\Task::create([ と書き換えたらどうなるのでしょう。これは後で試してみます。
AbeTakashi

2021/08/16 03:46

なるほど、質問文は編集でなおしていただくとして、sqliteで空のファイルを作るってのはおそらく必要ないと思います。クラスが見つからないってエラーであれば、なぜクラスが見つからないかをしっかり検証するのがいいと思います。PHPの場合はディレクトリ名やファイル名、ネームスペース、クラス名、大文字小文字の違い、など些細なことでそのようなエラーは発生します。
ranerane0101

2021/08/16 11:11

Class "Database\Seeders\App\Models\Task" not found at database/seeders/TasksTableSeeder.php:18 14▕ */ 15▕ public function run() 16▕ { 17▕ for ($i = 1; $i <= 10; $i++){ ➜ 18▕ App\Models\Task::create([ 19▕ 'title' => 'title' . $i, 20▕ 'content'=> 'content' . $i, 21▕ 'person_in_charge'=>'person_in_charge' . $i, 22▕ ]); こうなりました。引き続き色々試してみます。
AbeTakashi

2021/08/16 13:10 編集

あー、これだと相対になってダメですね、すいません 頭に \ を付けるとAppからの絶対パスになるので、それでチェックしてみてください。合わせてそのディレクトリ内にTask.phpがあるか? ファイル名やクラス名が間違ってないか? 大文字小文字は正しいかなど確認もしてみてください。とにかくかなり単純なミスの類だと思います。複雑なエラーではありません。
ranerane0101

2021/08/17 13:32

それでもだめでした。他の記事でsail composer dump-autoloadを実行するといいとあり、質問文を修正する前だとClass App\Task located in ./app/Models/Task.php does not comply with psr-4 autoloading standard. Skipping.このエラーが出ましたが、修正してからsail composer dump-autoloadを行うとこのエラーは無くなりましたが、依然として質問にある通りの Class "app\Models\Task" not found at database/seeders/TasksTableSeeder.php:18 14▕ */ 15▕ public function run() 16▕ { 17▕ for ($i = 1; $i <= 10; $i++){ ➜ 18▕ Task::create([ 19▕ 'title' => 'title' . $i, 20▕ 'content'=> 'content' . $i, 21▕ 'person_in_charge'=>'person_in_charge' . $i, 22▕ ]); このエラーでした。 質問文に同様の変更を記載しましたのでそちらのほうが見やすいかと存じます。
ranerane0101

2021/08/17 13:34

大文字小文字の区別が原因であったのがcomposer dump-autoloadでしたので今はもう大文字小文字は関係ないかと思います。Dockerでしょうか、、?
AbeTakashi

2021/08/17 15:14

なるほど。チェック済みかとは思いますが、ファイル名はしっかり確認した方が良いと思います。PHPのファイル名の大文字・小文字に関してはOS・ファイルシステム依存で、Dockerを使ってる場合はOSがLinux扱いになるので、ほぼ間違いなく影響受けるはずです(Windowsネイティブで実行しているPHPだと影響受けない)。 参考) https://qiita.com/tadsan/items/6c6329eeb43929271119 https://qiita.com/ABE_TAKASHI/items/5bfd526862385d301f53 とにかくクラスが見つからないってことですので、その辺を念入りに疑うしかありませんし、そこにフォーカスを当てて調べるのが一番の近道のはずです。Task::createの一連の文をいったんまるっと削除してどうか? 再度追加してどうか? など、一歩ずつチェックするしかないと思います。
ranerane0101

2021/08/20 08:17 編集

すいません。一つ目も二つ目も解決には至りませんでした。二つ目は自分の理解不足でどう解決したのかもわかりませんでした。他にはエディタで解決できないかとVSCodeの拡張機能であるRemote WSLというものも導入しました。他にもhttps://qiita.com/ucan-lab/items/b9c41024c3a16830e85f#php-coding-standards-fixerphp-cs-fixerここのサイトのfixerがsail ./vendor/bin/php-cs-fixer fix -v --diff --dry-runとsail無しコマンドもやっても実行できなかった、など行いました。
AbeTakashi

2021/08/20 11:27

うーん、ちょっと分からないですね。しつこいようですが、クラスが見つからないというエラーでしたら、とにかく単純なミスもしくは何かしらの勘違いなどだとは思います。なんとなくですがLaravel sailに起因している気がします。楽に使えるので人気ではありますが、Dockerの基礎的な知識がないと思わぬところでハマる場合があります。 例えばですが、MAMP環境でやってみるとか、Linuxの仮想環境上でやってみるとか、思い切ってLaravel sailを捨てて別の環境を試してみるのもいいかもしれません。お力になれずすいません。
ranerane0101

2021/08/20 16:38

いえいえ!丁寧にいろいろ改善できたところもお陰様でありましたので感謝しかないです。WSL2はLinuxの仮想環境ではないのですか?MAMPはWindowsですので残念ながら叶いません。
AbeTakashi

2021/08/21 01:36

WSL2はLinuxの仮想環境ですね。なので、WSL2上にApacheやNginx、PHPなどをセットアップしてLaravelのプロジェクトをそのまま置いて直接動かしてみるのは原因究明の手段としてはありだと思いますが、色々やることが多くてそれはそれで大変ですかね。
ranerane0101

2021/08/22 09:48

出来ました!名前空間についてもう少し勉強してきます。何度もお答えいただき本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問