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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

13504閲覧

Laravelでの「php artisan db:seed」がうまくいきません。

rude_rockers

総合スコア32

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/12/28 00:38

編集2018/12/28 03:09

Laravelでの「php artisan db:seed」がうまくいきません。

https://blog.hiroyuki90.com/articles/laravel-bbs/
この記事を参考に進めていましたが、かなり最初の段階で詰まりました。

環境 さくらレンタルサーバー(スタンダード)
php 7.2
Mysql 5.7
laravel 5.7.19

ファクトリーを作ります。

$ php artisan make:factory PostFactory --model=Post
$ php artisan make:factory CommentFactory --model=Comment

<?php use Faker\Generator as Faker; $factory->define(App\Post::class, function (Faker $faker) { return [ 'title' => '投稿のタイトル', 'body' => "本文です。テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト。\nテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト。テキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト。", ]; }); # database/migrations/UserFactory.php <?php use Faker\Generator as Faker; $factory->define(App\Comment::class, function (Faker $faker) { return [ 'body' => "コメントです。テキストテキストテキストテキストテキストテキスト。\nテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキストテキスト。", ]; });

実行用のシーダークラスを作成します。

$ php artisan make:seeder PostsTableSeeder

database/seeds/PostsTableSeeder.php

1<?php 2 3use Illuminate\Database\Seeder; 4use App\Post; 5use App\Comment; 6 7class PostsTableSeeder extends Seeder 8{ 9 /** 10 * Run the database seeds. 11 * 12 * @return void 13 */ 14 public function run() 15 { 16 factory(Post::class, 50) 17 ->create() 18 ->each(function ($post) { 19 $comments = factory(App\Comment::class, 2)->make(); 20 $post->comments()->saveMany($comments); 21 }); 22 } 23}

database/seeds/DatabaseSeeder.php

1<?php 2 3use Illuminate\Database\Seeder; 4 5class DatabaseSeeder extends Seeder 6{ 7 /** 8 * Seed the application's database. 9 * 10 * @return void 11 */ 12 public function run() 13 { 14 $this->call(PostsTableSeeder::class); 15 } 16} 17

そして実行。
$ composer dump-autoload

$ php artisan db:seed

エラー

Seeding: PostsTableSeeder Symfony\Component\Debug\Exception\FatalThrowableError : Class 'Post' not found at /home/paisen1/www/paisen2/laravel/bbs/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:228 224| if ($this->amount < 1) { 225| return (new $this->class)->newCollection(); 226| } 227| > 228| $instances = (new $this->class)->newCollection(array_map(function () use ($attributes) { 229| return $this->makeInstance($attributes); 230| }, range(1, $this->amount))); 231| 232| $this->callAfterMaking($instances); Exception trace: 1 Illuminate\Database\Eloquent\FactoryBuilder::make([]) /home/paisen1/www/paisen2/laravel/bbs/vendor/laravel/framework/src/Illuminate/Database/Eloquent/FactoryBuilder.php:178 2 Illuminate\Database\Eloquent\FactoryBuilder::create() /home/paisen1/www/paisen2/laravel/bbs/database/seeds/PostsTableSeeder.php:15 Please use the argument -v to see more details.

エラー内容もわかりませんし、調べても「composer dump-autoload」としろ、という記事ばかりで困っております。

「composer dump-autoload」は実行しました。
実行結果↓

Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump

@php artisan package:discover --ansi

Discovered Package: beyondcode/laravel-dump-server
Discovered Package: fideloper/proxy
Discovered Package: laravel/nexmo-notification-channel
Discovered Package: laravel/slack-notification-channel
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Generated optimized autoload files containing 3747 classes

よろしくお願いします。

もしかして、Laravelインストール後に親ディレクトリの名前を変更しましたが、それが関係していますか・・・?

「laravel_bbs』→「bbs」

クラスファイルもアップしておきます。

app/Post.php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Post extends Model 8{ 9 protected $fillable = [ 10 'title', 11 'body', 12 ]; 13 14 public function comments() 15 { 16 return $this->hasMany('App\Comment'); 17 } 18} 19

app/Comment.php

1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Comment extends Model 8{ 9 protected $fillable = [ 10 'body', 11 ]; 12 13 public function post() 14 { 15 return $this->belongsTo('App\Post'); 16 } 17} 18

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

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

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

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

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

m.ts10806

2018/12/28 00:43

エラーはわからないと仰いますが「Class 'Post' not found」ですよね。これが「分からない」ということでしょうか。意味は分かるかと思いますが・・。 あとdump-autoload してみたのでしょうか? 質問者さんが何を調べて何を試したかがこの内容では分からないので、具体的に追記してください。
rude_rockers

2018/12/28 00:50

dump-autoloadしてみました。 「ポストクラスが見つからない」も意味はわかります。 解決方法がわかりません。 もしかして、Laravelインストール後に親ディレクトリの名前を変更しましたが、それが関係していますか・・・?
m.ts10806

2018/12/28 00:56

親ディレクトリというとプロジェクト名ですかね。おそらく関係ないかと。 気になるのでしたら戻してみては? ちなみにApp\PostとApp\Commentはそれぞれきちんとクラスができていましたか?ファイルの中身もきちんと確認してくださいね。 下記、結果を追記願います。 >dump-autoloadしてみました。
m.ts10806

2018/12/28 01:56

dump-autoloadの結果、 /vendor/composer/autoload_classmap.php にどのように追加されましたか? 下記のようなにあればOKかと思います。 'App\\Post' => $baseDir . '/app/Post.php', 'App\\Comment' => $baseDir . '/app/Comment.php', リンク的にはdirname(__FILE__)で取得しているのでプロジェクトフォルダの名前変更の影響はないはずです。
rude_rockers

2018/12/28 03:09

ありがとうございます!
guest

回答1

0

ベストアンサー

エラーメッセージを見る限り、作成しようとしているのはApp\PostではなくPostクラスでそのクラスがないからエラーになっています。

そしてもう一つ気になるのはエラーメッセージのバックトレースには

2 Illuminate\Database\Eloquent\FactoryBuilder::create() /home/paisen1/www/paisen2/laravel/bbs/database/seeds/PostsTableSeeder.php:15

とありますが、質問に貼られているPostsTableSeederクラスのソースではcreate()の呼び出しは17行目であり、なぜか2行ずれています。

1 <?php↲ 2 ↲ 3 use Illuminate\Database\Seeder;↲ 4 use App\Post;↲ 5 use App\Comment;↲ 6 ↲ 7 class PostsTableSeeder extends Seeder↲ 8 {↲ 9 /**↲ 10 * Run the database seeds.↲ 11 *↲ 12 * @return void↲ 13 */↲ 14 public function run()↲ 15 {↲ 16 factory(Post::class, 50)↲ 17 ->create()↲ 18 ->each(function ($post) {↲ 19 $comments = factory(App\Comment::class, 2)->make();↲ 20 $post->comments()->saveMany($comments);↲ 21 });↲ 22 }↲ 23 }↲

質問に貼ったソースは実際に実行されているものと異なるのではないでしょうか。確認してみてください。

(use App\Post;use App\Comment;の2行が欠けているとするとつじつまがあいます)

投稿2018/12/28 02:32

crhg

総合スコア1175

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

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

rude_rockers

2018/12/28 03:14

本当にその通りすぎて反省しました。 自分は書き込んだものと思ってましたが、書き込んでいませんでした。 これはお手本の方をコピペしてしまっていたようです。 本当にありがとうございました。
rude_rockers

2018/12/28 05:28

いや、エラー文から正解コード見ておそらくこの二行が足りないと看破した洞察力に感動しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問