マイグレーションを実行したい
クエリビルダでDB読み込み、joinしたいがカラム名が重複してしまった!
〜大事なこと〜
->select(‘table_name.column_name as hoge’)みたいな感じ
重複を解決したら、状況によってはtable_name.*とかも使えて楽。以前は*無しで必要なカラムにいちいち命名していたけれど、よく考えたら*がめちゃくちゃ便利だわ。
〜やりたかったこと〜
データベースから、aso_reposというテーブルとusersというテーブルについて取得したい。aso_reposにもusersにもidがあって、aso_repos.user_idとusers.idを紐づけたい。
しかしカラム名が重複(idとかnameとか)していたので、解決策を模索。
〜やったこと〜
->select(‘table_name.column_name as hoge’)みたいな感じでカラム名を新たに決めてやればいいらしい。usersテーブルから取得したいのは、id, name, login_idの3種類。aso_reposテーブルからは全てを取得したい。aso_reposテーブルのカラム も1つ1つ名前を付けないとダメなのか?と思ったけれど、usersテーブルの方でカラム名を命名していて、今となっては重複がないので、’aso_repo.*’とだけ指定すればいいみたい。
*に関しては、「こんな楽な方法があったなら知りたかった」というのが率直な感想。以前はすべてのカラム名を指定していて、めちゃ長くなっていた……。
?hoge=valueとするか、&hoge=valueとするか。
〜やりたかったこと〜
現状、クエリ文字列があるかもしれない。無いかもしれない。わからないけれどクエリ文字列を追加したい。
〜やったこと〜
‘?’がすでに存在するかで分岐してみました。
blade上で、strposして’?’がすでに存在するか判定。存在していれば末尾に?hoge=valueを付加、存在していなければ?hoge=valueを不可、という分岐にしました。
クエリ文字列を含んだURLは、{{url()->full()}}で取得。
ドキュメントルートを変えたいが、サーバーの設定は変えられない。よし、慎吾リックリンクだ!
〜大事なこと〜
laravelのドキュメントルートは(project)/public/
publicを丸ごとシンボリックリンクにしてドキュメントルートを模擬?した。
$ ln -s 元 先
〜やったこと〜
$ ln -s /path/to/project/public /var/hoge
みたいな
$ cd /var/hogeすると、/path/to/project/publicの中身が表示される。
※リンク元で「~/」はやっていいけれど、「./」はやっちゃダメらしい。中身が出なかったり、「No such file or directory」と怒られたりした。
削除の場合はrm hoge
gitでcloneする場合、vendorと.envは初期設定でgitignoreされている。
〜やりたかったこと〜
ローカルで開発したプロジェクトを、サーバーにgitでアップロード。
〜やったこと〜
模範解答は「コマンドでプロジェクトを作りなさい、.envは環境に応じた設定を書きなさい」だろうけれど、scpでvenderと.envをまるっとコピーした。
呼び先のmethodでreturn呼び元のmethodでもreturn。
〜やりたかったこと〜
共通部分を共通化したかった。
ログインしていたらviewを呼ぶ、ログインしていなかったらログイン画面に飛ぶ、そういう処理を書きたかった。
〜やったこと〜
当初、呼び先のmethodでreturn view~としたけれど動かない。
呼び先ではreturn view~、呼び元ではreturn $this->hoge();としたら動いた。
9>10
〜大事なこと〜
「数字部分を抽出して配列に」->「最大の数字を取得」
〜やりたかったこと〜
「n_700.jpg」のようなファイル名がある。nは自然数。1番から番号を振っていきたい。後日ファイルが追加になったとき、続きの番号から{=(最大のn)+1から}ファイル名を振っていきたい。
1桁までは文字列の並べ替えでよかったが、9>10のような判定になってしまって困った。
〜やったこと〜
$file_names = scandir(public_path() . ‘/img/asobi/’ . $request->aid . ‘/aso_repo/’, 1);
$j = 0;
foreach($file_names as $file_name){
$file_names[$j++] = substr($file_name, 0, -8);
}
$i = max($file_names);
@extendsを条件に応じて変えたい
〜大事なこと〜
テンプレート側では@extends($hoge)のように記述して、コントローラ側で$hogeの内容を変える。
〜やりたかったこと〜
パソコンなら’objects.common’をextendsする、スマホなら’sp_objects.common’をextendsする、という分岐をやりたかった。
〜やったこと〜
@if(スマホ?)
@exends(‘sp_objects.common’)
@else……
のようにしたけれどダメ。
ミドルウェアで、スマホなら$request->ua=’sp_’、パソコンなら$request->ua=”となるようにして、
return view(hoge.hoge’, [‘ua’ => $request->ua . ‘objects.common’);とした。
そしてview側で@extends($ua)とすると、UAに応じたextendsができた。
気軽にphpinfo();が見たい
〜大事なこと〜
phpinfo();専用のmethodを定義。
(例)
public function phpinfo(){
phpinfo();
}
ルーティングして、特定のURLからphpinfo()が呼び出されるようにする。
Route::get(‘/phpinfo’, ‘HogeController@phpinfo’);
hoge.hoge.com/phpinfoにアクセスすると、phpinfoが出る。
※用が済んだら直ちに消しましょう!悪意のある人にも丸見えです。
〜失敗編〜


そう。こんな凡ミスでも。
いまだに原因不明で気持ち悪いけれど、王道のMiddleware使用で解決。