【Laravel5.4】LaravelでMySQLに接続して取得してみるぞい!

まずはDB設定

.envとconfig/database.phpで設定

早速接続するため、コントローラーとビューを用意

コントローラー側はすでに作ってあったコントローラーファイルに以下の関数を作成

// DB connect test
public function testconnect() {

//$users = DB::select(‘select * from test where active = ?’, [1]);
//return view(‘user.index’, [‘users’ => $users]);
$id = 1;
$result = DB::select(‘select * from test where id = ?’, [$id]);

var_dump($result);

return view(‘test_connect_db’, [‘result’ => $result[0]->name]);

}

ビュー側はこんな感じ

<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<div class=”container”>
<div class=”content”>
<div class=”title”>Foo!!{{$result}}</div>
</div>
</div>
</body>
</html>

あとはルートの設定routes/web.phpで追加したコントローラーのメソッドの分を追加して設定完了

いざ接続してみる!

しかしエラーが・・・

SQLSTATE[HY000] [2002] Connection timed out

接続設定があかんのかなぁと思い.envとconfig/database.phpのホスト設定をx.x.x.xからlocalhostに変更

再度試してみる

しかしまたエラー・・・

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

???
と思ってぐぐってみるとこちらヒット

どうやらdatabase.phpで’unix_socket’を設定しなければいけない

phpmyadminを開き以下実行

show variables like ‘%sock%’

socketのパスをLaravelのプロジェクトフォルダ/config/database.phpに記入

しかしエラー変わらず・・・

unix_socketの場所を確認してみるとホスト側にない

そりゃそうだ自分のmysqlはdockerコンテナだ

mysqlコンテナの中のファイルを参照しないとだからダメ(やりかたあるのかな?)

そんでもう一度socketのパスを空にすると解決

よく原因はわかんなかった・・・w

以下実行結果


array(1) { [0]=> object(stdClass)#179 (2) { [“id”]=> int(1) [“name”]=> string(8) “testtest” } } object(stdClass)#179 (2) { [“id”]=> int(1) [“name”]=> string(8) “testtest” }

Foo!!testtest

一行目はvar_dump()でDBから取得した情報を出力してみた
配列で返ってきて、その中の値はstdClassクラスのオブジェクトとして返ってきてる

とりあえずDBに接続して情報を取得するところまでできたので目的達成

シェアする

  • このエントリーをはてなブックマークに追加

フォローする