まずは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を開き以下実行
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” }
とりあえずDBに接続して情報を取得するところまでできたので目的達成
コメント