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

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

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

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

Q&A

解決済

2回答

5936閲覧

laravel5でseedクラスが実行できない

imamoto_browser

総合スコア1161

Laravel 5

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

0グッド

0クリップ

投稿2017/05/05 13:30

お世話になります、基本的なところでつまずいたのですが、ご教授ください。

やりたいこと
データベースにレコードを挿入したい

やったこと
下記のseedClassを用意

php

1<?php 2 2 3 3 use Illuminate\Database\Seeder; 4 4 class UsersTableSeeder extends Seeder 5 5 { 6 6 /** 7 7 * Run the database seeds. 8 8 * 9 9 * @return void 10 10 */ 11 11 public function run() 12 12 { 13 13 DB::table('authors')->insert([ 14 14 'name' => str_random(10), 15 15 ]); 16 16 } 17 17 }

php artisan db:seed実行
結果:何も表示されず、テーブルに何もinsertされていない

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

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

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

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

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

CHERRY

2017/05/05 14:39

DatabaseSeeder.php hs、どのようになっていますか?
imamoto_browser

2017/05/06 01:57 編集

回答ありがとうございます。DatabaseSeeder.phpの//$this->call(UsersTableSeeder::class);のコメントアウトを外したのですが、今度は[ReflectionException] Class UsersTableSeeder does not existと表示されてしまいます。
guest

回答2

0

ベストアンサー

databaseディレクトリ以下はPSR-4準拠ではないようなのでcomposer dump-autoloadを先にやっておく必要あります。

投稿2017/05/06 06:22

fagai

総合スコア2158

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

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

imamoto_browser

2017/05/06 08:01

そうだったんですね、オートロードしたらexistのエラーは消えて、単一のレコードはinsertできたのですが、質問のforeachの場合がまだできていません。 php artisan db:seed --class UsersTableSeederとすると、エラーがでて、なぜか}のsyntax errorとなってしまいます。
fagai

2017/05/06 08:13

質問のforeachの場合というのがよくわからないのですが・・・ php artisan db:seed --class UsersTableSeederではなく php artisan db:seed --class=UsersTableSeederと書く必要があるかもしれません。
imamoto_browser

2017/05/06 08:18

複数件テーブルに追加したい場合ですね。結論からいいますと、さきほど、for文書いて、複数件insertすることができました。どうもforeachの書き方がまずかったようです。BAとさせていただきます。
guest

0

一昨日からlaravel触りだしたばかりのものですが、seederの中でunguardしてないからではないですか?

複数のレコードを同時登録する際にはfillableの設定またはguardの設定が必要とドキュメントに書いてあったとおもいます。

的外れな回答でしたらすみません。。。

投稿2017/05/06 05:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

imamoto_browser

2017/05/06 08:09

回答ありがとうございます。DatabaseSeeder.phpにModel::unguard();とModel::reguard();を追加してみましたが、syntax error となってしまいました。私はhttps://readouble.com/laravel/5.1/ja/seeding.htmlをみていたのですが、fillableの設定またはguardの設定が書いてあるのはどのあたりでしょうか。
退会済みユーザー

退会済みユーザー

2017/05/06 08:16

自分は公式サイトのドキュメント見てます。 https://laravel.com/docs/5.4/eloquent ``` Mass Assignment You may also use the create method to save a new model in a single line. The inserted model instance will be returned to you from the method. However, before doing so, you will need to specify either a fillable or guarded attribute on the model, as all Eloquent models protect against mass-assignment by default. A mass-assignment vulnerability occurs when a user passes an unexpected HTTP parameter through a request, and that parameter changes a column in your database you did not expect. For example, a malicious user might send an is_admin parameter through an HTTP request, which is then passed into your model's create method, allowing the user to escalate themselves to an administrator. So, to get started, you should define which model attributes you want to make mass assignable. You may do this using the $fillable property on the model. For example, let's make the name attribute of our Flight model mass assignable: ```
imamoto_browser

2017/05/06 08:21

英語版の方が詳細に載ってそうですね。 for文でとりあえず複数件のレコード挿入ができたので、ファクトリやMass Assignmentの学習を進めたいと思います。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問