マイグレーションを実行したい
joinしたいがカラム名が重複!
?hoge=value/&hoge=value
よし、慎吾リックリンクだ!
gitでclone
呼び先のmethodでreturn呼び元のmethodでもreturn。
9>10
@extendsを条件に応じて変えたい
気軽にphpinfo();が見たい
〜失敗編〜

マイグレーションを実行したい

$ php artisan migrate

クエリビルダで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が出る。
※用が済んだら直ちに消しましょう!悪意のある人にも丸見えです。

〜失敗編〜

bladeテンプレートって便利だけど、{}とか()とかは Atomくんが対応する相方を教えてくれるから、それに甘えるようになっちゃった私としては@ifと@endifの対応を教えてくれないのがちょっと寂しい。(訳:@endifを書き忘れることがたまにある)

スクリーンショット 0030-09-05 16.39.03 
人間は、往々にして人様のせいにしてしまう。自分がディレクトリを間違えただけなのに、「このサーバーだとできないのか」なんて言うことがある。

スクリーンショット 0030-08-29 23.44.15

スクリーンショット 0030-08-27 13.11.20
惑わされちゃいけない。コントローラ内部に問題があってもこの文章が出る。

そう。こんな凡ミスでも。

 スクリーンショット 0030-08-27 13.12.10
共通部分を共通化したくて、ControllerからControllerを呼び出した。呼び出せたように見えたが、挙動がおかしい。具体的には、session保存できる、1回目はsessionを正しく読み込める、2回目以降はsessionがnull扱い、ただし呼び出し元と呼び出し先が同じControllerの場合(つまり$this->)は正常動作。
いまだに原因不明で気持ち悪いけれど、王道のMiddleware使用で解決。
お気に召しましたか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です