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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

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

PHP

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

Laravel 5

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

Q&A

解決済

2回答

2244閲覧

シーディングの実行を失敗してしまう

toll_tree

総合スコア199

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

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

PHP

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

Laravel 5

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

0グッド

0クリップ

投稿2019/05/23 01:38

編集2019/05/23 02:41

前提・実現したいこと

シーディングを実行したいです。

発生している問題・エラーメッセージ

php artisan make::seeder PeopleTableSeederとコマンドプロンプトに打ち込み、シーダーファイルを作成し、シーダーファイルを登録する為、DatabaseSeeder.phpに登録処理を記述しました。
そして、シーディングを実行する為、「php artisan db::seed」としたのですが以下のエラーが発生してしまいました
「 Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1 no such table: people (SQL: insert into "people" ("name", "mail", "age") values (taro, taro@yamada.jp, 12))」
以下は、databaseファイル内のconnection.phpのコードです。

ampp\htdocs\laravelapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664 660| // If an exception occurs when attempting to run a query, we'll format the error 661| // message to include the bindings with SQL, which will make this exception a 662| // lot more helpful to the developer instead of just the database's errors. 663| catch (Exception $e) { > 664| throw new QueryException( 665| $query, $this->prepareBindings($bindings), $e 666| ); 667| }

該当のソースコード

以下は、PeopleTableSeederです。

php

1<?php 2 3use Illuminate\Database\Seeder; 4use Illuminate\Support\Facades\DB; 5 6class PeopleTableSeeder extends Seeder 7{ 8 /** 9 * Run the database seeds. 10 * 11 * @return void 12 */ 13 public function run() 14 { 15 $param = [ 16 'name' => 'taro', 17 'mail'=> 'taro@yamada.jp', 18 'age' => 12, 19 ]; 20 DB::table('people')->insert($param); 21 22 $param = [ 23 'name' => 'hanako', 24 'mail' => 'hanako@flower.jp', 25 'age' => 34, 26 ]; 27 DB::table('people')->insert($param); 28 29 $param = [ 30 'name' => 'sachiko', 31 'mail' => 'sachiko@happy.jp', 32 'age' => 56, 33 ]; 34 DB::table('people')->insert($param); 35 } 36} 37

以下は、DatabaseSeeder.phpです

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(PeopleTableSeeder::class); 15 } 16} 17

試したこと

エラー「 1 no such table:」と出ていたので、 select count(*) from sqlite_master where type='table' and name='people';とコマンドに打ち込んだのですが、「1」が返ってきた為、テーブルは存在しているものと思われます。

補足情報(FW/ツールのバージョンなど)

laravelのバージョンは5.8
phpは、7.3.1
OSはwindows10です

追記です
以下は、php artisan make:migration create_people_tableとし、作成したマイグレーションファイルになります。

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreatePeopleTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('people', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('mail'); $table->integer('age'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('people'); } }

データベースファイル名はdatabase.sqliteです。
ファイルのパスは「C:\xampp\htdocs\laravelapp\database」です。

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

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

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

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

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

m.ts10806

2019/05/23 02:27

エラーとPHPのコードだけ置かれても再現確認は不可能なので、 SQLiteタグを追加し、構成ファイルのパスとファイル名、対象テーブルのCREATE TABLE文を記載してください。 また、関連質問なのであれば関連質問のリンクを質問本文に追記してください。
toll_tree

2019/05/23 02:34

構成ファイルのパスとはなんのファイルのことでしょうか?
m.ts10806

2019/05/23 02:37

伝わってないのが不思議です。 SQLiteの構成ファイルのパスとファイル名です。 データベースファイルがどこかに置かれていないとSQLiteにアクセスできませんよ。「再現確認」なので「実際に同じファイルを同じ階層に置いて」でないと。 逆にこの質問内容にあることだけで他人が再現確認できるか考えてみてください。「できるように勝手に置いた」では結局できるようにしかなりません。 今は「できない」のが問題なのですから「できない」状況を完全再現できる情報を提示する必要があります。
guest

回答2

0

先日の質問の回答に書いたことを活かしてほしいです。
SQLを直接実行すること

「プログラムで実行しようとしているSQLを直に実行すること」
です。
INSERT実行しようとしているわけで、エラー文にもエラーとなっているSQL文を出してくれているのですから、それを拾って実行するのが通常です。

プログラムにどこにも書いていない、エラーメッセージにもない、エラーにならないSQLを実行しても何の問題切り分けにもなりません。

SELECT投げるにしてもINSERTしようとしている先に直接投げるべきです。
sqlite_masterに問い合わせるのはそのあとでsqlite_masterに投げるにしてもテーブル名で絞り込むよりselect name from ~~として一覧を出して確かめるやり方を取るべきですね。


SQLiteはファイルを直にそこに置いてアクセスさせるのでMySQLなどのDBと違って扱い方がやや特殊です。
SQLiteのエラーが出たのでしたらエラーの一部を見て自分で判断せず、そのエラーで検索して解決方法を模索するほうが確実でしょう。
コマンドから実行する場合には特にそうで、きちんとそのファイルを見に行っているか確認する必要もあります。

※上記は一例。同エラーSQLSTATE[HY000]: General error: 1 no such table検索で約 25,600 件ヒットします。それだけよく見るということですね。
General error: 1 no such tableだと約 630,000,000 件。
これだけあればどこかにズバリの解決策が転がっていることでしょう。

投稿2019/05/23 01:55

編集2019/05/23 02:01
m.ts10806

総合スコア80850

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

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

0

ベストアンサー

まずはphp artisan migrate:statusを実行して本当にテーブルが生成されているか確認をしてください。
してるとは思いますが、migrateコマンドを実行しないとテーブルは作成されないです

投稿2019/05/23 02:47

sola-msr

総合スコア876

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

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

toll_tree

2019/05/23 02:54

今確認してみましたら、以下のように表示されました Ran? | Migration | Batch | +------+------------------------------------------------+-------+ | Yes | 2014_10_12_000000_create_users_table | 1 | | Yes | 2014_10_12_100000_create_password_resets_table | 1 | | No | 2019_05_22_101705_create_people_table | | +------+--------------------------------------
toll_tree

2019/05/23 02:55

create_people_tableは生成されていないということですかね...?
sola-msr

2019/05/23 02:57

そうですね、なので`php artisan migrate`を実行してからシーダーを実行してください
toll_tree

2019/05/23 03:06 編集

勉強不足で色々抜けていて申し訳ないです。 今、php artisan migrateとし、もう一度php artisan migrate statusとしましたら、_create_people_tableのBatchの項目が「2」となっていたのですが、これは何を意味していると推測されますでしょうか。。?
sola-msr

2019/05/23 03:08

んーたしかmigrateコマンド実行時の回だった気がします ↑でいうと、二回目のコマンド実行時にこのmigrateを実行しましたという記録かなと
toll_tree

2019/05/23 03:09

え!となると、migrate実行は2回目だが、1回目は失敗してしまっていたということかもしれないですね。。。
sola-msr

2019/05/23 03:13

いや、ちがいます 実行されたかの状態は一番左の「Yes」「No」で確認できます。 今の状態は、(憶測ですが)usersテーブルとpassword_resetsテーブルについてはmigrate実行されているが、peopleテーブルはまだmigrate実行されてないよ、って状態です
toll_tree

2019/05/23 03:14

php artisan db:seedを実行しましたら、 「Seeding: PeopleTableSeeder Database seeding completed successfully.」と表示され、テーブルが作成され、シードが適用されていることが確認できました。
toll_tree

2019/05/23 03:18

>peopleテーブルはまだmigrate実行されてないよ、って状態です 取り敢えず、現在の状態としましては、php artisan statusで、「Run」項目の_create_people_tableはyesとなっていたので、無事実行されていたみたいです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問