カテゴリー
Laravel PHP SQL ただの現状記述 (Daily Activities) インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

Laravelのmodelingで作成した MySQL tableの変更をするには

>php artisan migrate

で migrationを一旦行った MySQLテーブルはそのままだと migrationコマンドを用いても変更不可能です

実際に Web siteを作っている時にこれは不便です 途中で databaseの構造を変更することはよくありますので・・・

そこで検索すると出てきましたね こことか、こことか

>composer require doctrine/dbal

要するに composerを用いて dbalというものをインストールすれば可能になるそうです 忘れないようにここに記しておきました

カテゴリー
Laravel Mac PHP ただの現状記述 (Daily Activities) インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

色々な情報

この MAMP/MySQL/Laravelでの接続不良で随分と調べました。日にちを数えてみたのですが、正解が出てくるまでに、結局約2週間を費やしました。その中で、色々なサイトから貴重な情報を得ることができました。たとえばこのサイトからは、MySQLの password形式について学びました。

MySQLユーザー認証方式変更
MySQLユーザー認証方式変更

結局これが原因の本筋ではありませんでしたが、貴重な情報提供に感謝感謝です。

カテゴリー
Laravel Mac PHP ただの現状記述 (Daily Activities) コンピューター (Computer) プログラミング (Programming)

1週間にわたる苦闘の終了

これまで1週間かかって Laravelの database接続不能に対峙してきました。色々なことを調べ、いくつもの問題点を解決し、そしてさらには MacOSのみならず、Windowsにもインストールして試みました。

今朝までに判明したことは、色々と改善しても、この問題点のみ残る、ということでした。それは Laravelにおいて、MySQL databaseとの接続に際して下記のようなエラーが起こるということです:

何時までも消えないエラー
何時までも消えないエラー

このサラッとしたエラーに悩まされました。しかも調べていると、このエラーは MAMPにより仮想インターネットサーバーを走らせている MacBook Pro Catalinaでのみ起こり、Parallels-Windows-XAMPPあるいは Surface-Pro – XAMPPでは見られないのです。このようにある時のみ発生するエラーというのは原因究明に困りますよね。

結局判明したのが、何とこんなことだったのです

MAMP main screen
MAMP main screen

この中の Allow network access to mysqlというチェックボックスをチェックせねばならないのです。このボタンは defaultでは offになっているので分からないのです。

これで解決しました。これで Laravelを使いこなすようになって Coronaに勝利するのです。

カテゴリー
Laravel Mac PHP ただの現状記述 (Daily Activities) コンピューター (Computer) プログラミング (Programming)

どうしても解決しない

さて、Laravelに向かって進んでいるのですが、一向に前に進めません。その理由は、最初の migrationで躓いているのです。要するに、migrateすると下記のエラーが出てしまうのです・・・

Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from `books`)

どうしてこのエラーが出るのかさっぱり分かりません。もちろん色々と調べ、その指示に従い改善してきました。しかし解決しません。

ここまでやってきたことは mysql設定が主です。そして、試みたマシンが MacBook Pro Catalina、Surface-Pro Windows 10、そして Parallels Windows 10 on MacBook Proなのですが、予想していた通りと言っては怖いのですが、なんとこのエラーが出現するのは MacBook Pro Catalinaだけなのです。

こうなると Catalinaが悪い、とも思えてきますが、今のところ調査した範囲では Catalinaの厳しい securityと Laravelが合わない、という話は聞いたことがありません。困りました

カテゴリー
Laravel PHP ただの現状記述 (Daily Activities) コンピューター (Computer) プログラミング (Programming)

なかなか Laravelで MySQLに接続できない

つい最近の投稿がありました まさしくここに僕がこの一日間悩みぬいた問題の解決策がありました こんなことどこにも書いていません

$mysql -u root -p****

#これで mysql consoleに入れますので promptが変わります

mysql> select host, user from mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| 127.0.0.1 | root          |
| ::1       | root          |
| localhost | laraveluser   |
| localhost | mamp          |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
7 rows in set (0.00 sec)

mysql> create user 'laraveluser'@'localhost' identified by 'laravelpassword';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all privileges on laravel.* to 'laraveluser'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> alter user 'laraveluser'@'localhost' identified with mysql_native_password by 'laravelpassword';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user, host, plugin FROM mysql.user;
+---------------+-----------+-----------------------+
| user          | host      | plugin                |
+---------------+-----------+-----------------------+
| root          | localhost | mysql_native_password |
| mysql.session | localhost | mysql_native_password |
| mysql.sys     | localhost | mysql_native_password |
| mamp          | localhost | mysql_native_password |
| root          | 127.0.0.1 | mysql_native_password |
| root          | ::1       | mysql_native_password |
| laraveluser   | localhost | mysql_native_password |
+---------------+-----------+-----------------------+
7 rows in set (0.00 sec)

さてここまでやっとたどり着きました

カテゴリー
Laravel Mac PHP ただの現状記述 (Daily Activities) コンピューター (Computer) プログラミング (Programming)

MAMPで走っている MySQL (Marina DB)コンソールを使うには?

このすべての意欲を無くす勢いの Coronarvirusですが、それに負けてはいけません。これを機会と捉えて前に進まねばならないのです。そしてその時には、これまでできなかった自分の中での革命的ステージに進まなければならない、そのように考えています。

今選択しているのが、この機会にどうしても突き破れなかった PHP Framework/Laravelの壁です たくさんの壁が立ち向かいますが、それぞれに正面突破していくのです。

本日は、MAMPで走っている MySQLのコンソールをどのように立ち上げ、そしてmysql commandを使うのか? という問題です。なかなかそんな場面には遭遇しないのですが、これを使いこなせるか否かで明らかにステージが違います。まずは、MAMPで mysqlコマンドを立ち上げるには?

$ls /Application/MAMP/Libraries/bin/

> -rwxr-xr-x  1 transradial  admin   5150176  2 17 23:14 mysql

はいこれで、MAMPで走っているmysqlコマンドの場所がわかりましたので、それを$PATHに書き込みます

$export PATH="/Applications/MAMP/Library/bin:$PATH"
$source ~/.zshrc

これで MAMPのApach/MySQLが作動開始していれば、zshで以下のようにmysql console commandが立ち上がります

$mysql -u **** -p++++++;

mysq>

もちろん -uの後は半角スペースあけて user name (通常はroot)ですね、そして -pの後は半角スペースを開けないで passwordを入れます。これで mysqlのコマンド待ちとなります。

さて、mysql commandから shellコマンドを立ち上げるにはどうすれば良いでしょうか? これはこのようにするのです

mysql>\! ls

上記は shell command lsを打ち込んだものですが、このように backslushに続いて!を入れ、そして半角スペース開けてコマンドを入れるのです。知らなかったなあ こんな世界、それでステージクリアです。それにしても本日は寒いです。

カテゴリー
SQL インターネット一般 (Internet General) コンピューター (Computer) プログラミング (Programming)

MAMPで mysqlをターミナルから動作させるには?

さて、Laravel 6.x or 7.xが何となく走り出しました 通常僕の Macでは local環境では MAMPにより LAMPを実現しています。

もちろん、こんなことしないでも Homebrewで最新の apach, php, mysqlなど走らせてそれで LAMPとするのが本道でしょうが、なかなか自分にはそこまでのスキルがありませんので、ついつい MAMP/XAMPPを頼ってしまいます。

さて、Laravelを走らせて早速つまづいたのが、どうやってMAMPでの mysqlをターミナルで走らせるか? です。

色々調べましたが、MAMPの中の mysql実行ファイルは僕の場合、/Application/MAMP/Library/bin/の中にあることが分かりました。

そこで、

$ ./Application/Library/bin/mysql -u -p

とすることにより動作させることができる筈なのですが、エラーが出るのです

これに対しては、ここで解決しました 良かった良かった

カテゴリー
Haskell コンピューター (Computer) プログラミング (Programming)

それでは Haskellでは?

一時期あれほど勉強していた Haskellですが、やはり超難解のコンピューター言語のせいで最近は他の言語、特に Pythonに揺り戻しなのですね。

さてその Hasekllでは前述の簡単な演算ラムダ関数はどのように書くか?と云えば以下のようになります

Prelude>(\a b c -> a * a + b * b + c * c) 1 2 3
14

このように Haskellでは変数や数字の区切りは空白であり、通常の言語のように, を挟むとエラーとなりますし、引数である数字全体を通常の関数呼び出しのように( )で囲ってはいけません

カテゴリー
Python コンピューター (Computer) プログラミング (Programming)

ちなみにラムダ関数の使いどころ

さて、前述のようにラムダ関数を

In [1]: ex1 = lambda a, b, c: a * a + b * b + c * c

のように、適当な関数名 ex1に代入するのはわかりやすいです、でもラムダ関数の本領はこのような使い方ではなく、無名関数として使う場合なのです。例えば一回しか使わないで、使い捨てに関数を使う場合、次のような場合です

In [5]: (lambda a, b, c: a * a + b * b + c * c)(1, 2, 3)                                                                                    
Out[5]: 14

これを見て下さい。いきなり引数に値を(1, 2, 3)で代入することにより結果である 14が得られていますね。

これが本来のラムダ関数的使い方のようです。

カテゴリー
Python コンピューター (Computer) プログラミング (Programming)

Python ラムダ関数

新しい高級言語にはたいていラムダ関数というものがあります Haskell然り、Python然りです。

でも僕のレベル理解では難解なのでテストに走らせて調べてみました まずは IPythonを立ち上げてやってみました

Last login: Sat Feb 22 08:09:39 on ttys006
(base) ~ ❯❯❯ ipython
Python 3.7.6 (default, Jan  8 2020, 13:42:34) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.12.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: ex1 = lambda a, b, c: a * a + b * b + c * c                                                                                         

In [2]: ex1(1, 2, 3)                                                                                                                        
Out[2]: 14

ここでは ex1()という関数が作られ、その引数に3つの変数を持ってきました これは新たな関数なので、動作させるためには、例えば ex1(1, 2, 3)のようにすれば良いのですね。これは以下のように defを用いてex2を関数定義するのと当価ですね:

In [3]: def ex2(a, b, c): 
   ...:     return a * a + b * b + c * c 
   ...:                                                                                                                                     

In [4]: ex2(1, 2, 3)                                                                                                                        
Out[4]: 14

ここまでは簡単で容易に理解できます