🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

PHP

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

データベース

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

Q&A

解決済

1回答

1014閲覧

Laravelでphp artisan migrationコマンドを打ってもテーブルの作成ができない

mamara

総合スコア4

Laravel

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

PHP

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

データベース

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

0グッド

0クリップ

投稿2021/03/07 11:03

編集2021/03/07 12:22

前提・実現したいこと

Laravelからmysqlに接続してマイグレーションファイルからテーブルを作成したい

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

could not find driver (SQL: select * from information_schema.tables where table_schema = public and table_name = migrations and table_type = 'BASE TABLE')

試したこと

php.iniの
extension=pdo_mysql、extension=mysqliがコメントアウトされていないことの確認
extension_dir="C:\xampp\php\ext"が適切であるかの確認

php --iniとphpinfo()を比較し同じ場所のphp.iniを読み込んでいることの確認

.envファイル
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=データベース名
DB_USERNAME=ユーザー名
DB_PASSWORD=パスワード
がそれぞれ正しく設定されていることの確認

###試したコード

$dsn= 'mysql:dbname=データベース名;host=localhost'; $user = 'ユーザー名'; $password = 'パスワード'; $dbh = new PDO($dsn, $user, $password); $query = "SELECT * FROM テーブル名"; $stmt = $dbh->query($query); $row = $stmt->fetch(PDO::FETCH_ASSOC); echo $row['列名'];

この形のコードではデータベースに接続し、データを取得することができました

Laravelで同様にPDOインスタンスを作成しているであろう
"C:\xampp\htdocs\プロジェクト名\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php"のコード

protected function createPdoConnection($dsn, $username, $password, $options) { if (class_exists(PDOConnection::class) && ! $this->isPersistentConnection($options)) { return new PDOConnection($dsn, $username, $password, $options); } return new PDO($dsn, $username, $password, $options); }

のnew PDO($dsn, $username, $password, $options)の引数に直接値を入れるとmigrationは成功するがテーブルは何も作成されないという結果になりました。現在は元のコードに戻しています

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

Laravel Framework 6.20.17
PHP 7.4.11

Laravel Framework 8.31.0でも同様のエラーが発生しました

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

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

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

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

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

m.ts10806

2021/03/07 11:20

>extension=pdo_mysql、extension=mysqliがコメントアウトされていないことの確認 確認結果、どうだったのでしょうか。
mamara

2021/03/07 11:21

コメントアウトされておらず通常であれば接続できる状態でした
phper.k

2021/03/07 11:37

docker や virtualbox などの仮想環境は使ってますか?
mamara

2021/03/07 11:46

dockerは学習用にインストールのみしました。実際に動かしてはいませんがdockerに原因があるのでしょうか
mamara

2021/03/07 12:01

dockerをアンインストールしてコマンドを試してみましたが同様の結果になりました
hentaiman

2021/03/07 12:04

vendor配下なんて今時触らんで、バグあった4系の頃ならともかく
mamara

2021/03/07 12:12

そうですよね...正直原因がわからず八方塞がりなので実装に問題があるのではないかと疑ってしまいました
Lulucom

2021/03/07 12:28

config/database.php を変更したりしていませんか?(していたら掲載をお願いします) .env ファイルで DB_CONNECTION の行を複数書いてしまっているということはないでしょうか。 php artisan config:clear で設定キャッシュをクリアしても変わらないでしょうか。
mamara

2021/03/07 12:39 編集

試行錯誤しているときに変更はしましたが現在はもとに戻しています。設定キャッシュをクリアしても同じエラー文が表示されます 念のため最新バージョンのプロジェクトでも確認しましたが同様のエラー文です DB_CONNECTIONに関する行は 'default' => env('DB_CONNECTION', 'mysql'),これだけでした
Lulucom

2021/03/07 12:39

php artisan tinker で起動される Tinker で以下を実行すると、それぞれ意図した結果が表示されますか? config('database.default') config('database.connections.mysql')
mamara

2021/03/07 12:44

config('database.default')はmysqlと意図したとおりの結果が表示されましたがconfig('database.connections.mysql')ではurlがpostgresのものになっていました
Lulucom

2021/03/07 12:45

ありがとうございます。ではconfig/database.phpも掲載をお願いします。
Lulucom

2021/03/07 12:46

.env ファイルで DATABASE_URL 環境変数を定義してしまっていませんか?
mamara

2021/03/07 12:49

すいません。原因がわかりました。以前DBでpostgresを使用していたのですがその時に環境変数DATABASE_URLにpostgresのurlを設定しました。Laravelがこの環境変数を参照してurlに反映したと考え環境変数から削除したところ無事コマンドは成功しました。個人的な問題で申し訳ないです
guest

回答1

0

ベストアンサー

.env ファイルで DATABASE_URL 環境変数を定義してしまっていませんか?

これを設定すること自体は問題ではありませんが、設定すると config/database.php で mysql.url の値が設定され、DB_HOST, DB_PORT 等の他の環境変数の値とぶつかってしまいます。

DATABASE_URL の形式で指定するか、DB_HOST, DB_PORT 等で個別に指定するか、どちらか一方の指定方法にしましょう。

投稿2021/03/07 12:50

編集2021/03/07 13:12
Lulucom

総合スコア1899

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

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

Lulucom

2021/03/07 13:00 編集

(すみません、回答に移動させました)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問