LaravelのEloquentでwhereInを使う。例えば4つのIDから最小の値段を取得する場合。
$nedan = Title::whereIn('id',[10,11,12,13])->min('nedan');
LaravelのEloquentでwhereInを使う。例えば4つのIDから最小の値段を取得する場合。
$nedan = Title::whereIn('id',[10,11,12,13])->min('nedan');
Laravelのソース内でArtisanコマンドを使う。
Artisan::call('mybench:mycommand');
引数付きで使う例。
Artisan::call('mybench:mycommand', ['year' => 2014]);
引数付きで使う場合、自作コマンド側の引数受け取り部分はこうなる。
/** * Get the console command arguments. * * @return array */ protected function getArguments() { return array( ['year', InputArgument::OPTIONAL, '年'] ); }
Laravelでラジオボックスの情報を取得したときのメモ。
Blade側
@foreach($comments as $comment) <div class="inline-group"> <label class="radio"> <input type="radio" name="priority_{{ $comment->id }}" value='abc'> <i class="rounded-x"></i>abc </label> <label class="radio"> <input type="radio" name="priority_{{ $comment->id }}" value='efg'> <i class="rounded-x"></i>efg </label> <label class="radio"> <input type="radio" name="priority_{{ $comment->id }}" value='hij'> <i class="rounded-x"></i>hij </label> </div> @endforeach
コントローラー側。
$inputs = Input::all(); foreach ($inputs as $key => $value) { if (strpos($key, 'priority_') !== FALSE) { $id = str_replace('priority_', '', $key); $comment = Comment::find($id); $comment->priority = $value; $comment->save(); } }
以前手動インストールの方法を書いたので今度は自動インストール。
ComposerをWindowsに手動インストール - ふたりはララベル (Laravel PHP Framework)
Composer-Setupをダウンロードして実行する。以下の画面でphp.exeのパスを指定するだけ。
これで完了。以下のコマンドでバージョンが出てきたら成功している。
composer -V
Laravel5のスタート画面では、格言がランダムで表示されるようになった。↓白くて薄い!
どうやって表示しているのだろう?と思ってtemplateの内容を見てみたら
Inspiring::quote()
というメソッドが格言を表示していた。ソースを追ってIlluminate\FoundationのInspiring.phpを開いたら「ユングフラウヨッホ山(標高3500M)にいるときにコミットしたわー」とLaravel作者のコメントが書かれていた。コミットした物理的な場所を書くのは珍しいな。
ちなみに表示される格言は以下のとおり。
When there is no desire, all things are at peace. - Laozi
「欲を持たなければ、全ては安らかとなる - 老子」 中国語だと「不欲以静 天下将自定」なので英語とはちょっと意味が違いますね。
Simplicity is the ultimate sophistication. - Leonardo da Vinci
「単純さは洗練の極みである レオナルド・ダ・ヴィンチ」 これは日本でも有名な格言です。
Simplicity is the essence of happiness. - Cedric Bledsoe
「単純さは幸福の本質である セドリック・ブレッドソー」 セドリック・ブレッドソーって誰?
Smile, breathe, and go slowly. - Thich Nhat Hanh
「笑い、呼吸をすることで、穏やかに生きる ティク・ナット・ハン」 ベトナムの坊さんの格言。この場合の「呼吸」は生理現象じゃなくて瞑想するときなんかの精神的な呼吸ですね。
Simplicity is an acquired taste. - Katharine Gerould
「単純さは獲得されるものである キャサリン・ジェロールド」 エッセイストらしい。この「単純」は「複雑さの対義語」です。
注目すべきなのは、半分以上の格言の主語が「Simplicity(簡素、単純)」であること。日本語の「単純」はネガティブなイメージがあるけど、Inspiring::quote()の「単純」はとてもポシティブだ。
私も仕事で「これ、プログラムで何とかなりませんか?」としょっちゅう依頼される。殆どの場合、依頼者たちは私が呆れるほど仕様を複雑に考えている。私が問題を解決すると「さすが!」と評価されるけど、私の頭が良いわけじゃない。プログラミングしているうちに物事をシンプルに捉えるクセが自然に身についただけだ。逆にネット上には私が悩んでいたプログラミング上の問題をシンプルに解決する解答ばかりだ。
単純であればあるほど論理的になっていく感覚はもっと広まっていいと思う。
そしてSimplicityを目指しているというLaravel5が楽しみだ。
ところでInspiring::quote()はネタにできそうな機能だ。フレームワークに疲れた心情を表現してみた。
Pycharm上でプログラムが実行できなかった。調べたらpython interpreterの設定が「None」になっていた。何も設定しないとそうなるのかよ。
Python.exeを指定したら動いた。
Eloquentのwhereメソッドは重ねることもできる。
Title::where('type', '=', $type)->where('rank', '>', '100')->get();
「orWhere」というのもある。
Title::where('type', '=', $type)->orWhere('rank', '>', '100')->get();
ファイル管理のためのソフトが欲しかったけど、PydioとOwncloudのどっちが便利か悩んで決められなかった。だから両方ともサーバに入れてみた。
ところがOwncloudはちょっとバージョンアップしたらぶっ壊れてしまった。Pydioは5.2から6.0のバージョンアップもマウスクリックだけで無事終了。今後はPydio一本で行こう。でもPydioのAndroidクライアントの使いにくさはなんとかしてほしい。
Perlでn次ハッシュを使った時のメモ
use strict; use warnings; my %hash; my @array1 = ('1','2','3'); my @array2 = ('a','b','c'); my @array3 = ('A','B','C'); foreach my $value1 (@array1) { foreach my $value2 (@array2) { foreach my $value3 (@array3) { push(@{$hash{$value1}{$value2}},$value3); } } } foreach my $key1 (keys(%hash)) { my %hash2 = %{$hash{$key1}}; foreach my $key2 (keys(%hash2)){ foreach (@{$hash{$key1}{$key2}}) { print "$_ "; } } }
出力結果は
A B C A B C A B C A B C A B C A B C A B C A B C A B C
あんまり意味ないな。
Eloquentを使ってfindの前後を取得するテクニックがあった。
How to get previous / next records in DB with Eloquent. (Page 1) / Laravel 3.x Code Samples / Laravel Forums
なるほど、モデルにそういうメソッドを追加すればいいのか。
idだったら上記のテクニックでOKだけど、id以外の要素だと工夫が必要だね。
public function get_next() { return static::where('votes', '<', $this->votes) ->where('subject', $this->subject) ->orderBy('votes','DESC') ->first(); } public function get_previous() { return static::where('votes', '>', $this->votes) ->where('subject', $this->subject) ->orderBy('votes','DESC') ->first(); }
下記のようにidを指定してcreate()しても、指定した数ではなくて通番になっていた。
$name = Name::find(4); Title::create(['id' => $name->id])
モデル上でidを保護しているのが原因だった。
<?php class Title extends Eloquent { protected $guarded = ['id'];
モデルの保護を全消したら想定通りの動作になった。
<?php class Title extends Eloquent { protected $guarded = [];
以前にも似たエントリ書きました。 さくらのレンタルサーバにLaravelをインストール - ふたりはララベル (Laravel PHP Framework)
以前との違いは
です。
今回は以下のフォルダに作ることにしました。
/home/mysakura/source
例によってレンタルサーバにComposerをインストールする - ふたりはララベル (Laravel PHP Framework)を参照してください。composer.pharの置き場所は/home/mysakura/sourceです。
以下のコマンドを実行すればインストールが始まります。
php composer.phar create-project laravel/laravel myproject --prefer-dist Installing laravel/laravel (v4.2.11) - Installing laravel/laravel (v4.2.11) Downloading: 100% Created project in myproject
publicフォルダにシンボリックリンクを貼ります。
ln -s /home/mysakura/source/myproject/public/ /home/mysakura/www/myproject
ここでhttp:://mysakura.jp/myprojectにアクセスしてもまだエラーが出ます。
htaccessのパスは
/home/mysakura/source/myproject/public/.htaccess
です。
「Options -MultiViews」の行をコメントアウトしてください。
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> #Options -MultiViews </IfModule> RewriteEngine On # Redirect Trailing Slashes... RewriteRule ^(.*)/$ /$1 [L,R=301] # Handle Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
これでhttp:://mysakura.jp/myprojectにアクセスすればLaravelのアイコンが出ます。
LaravelのEloquentからtruncateも実行できる。
Mymodel::truncate();
LaravelのWorkbench内にSeederを作ってdb:seedしたい。
まず以下のフォルダを作る。
workbench\your_vendor_name\your_package_name\src\database\seeds
seedsフォルダ内で普通にSeederを作る。ちなみに以下の例ではFakerを使ってSeederを作ってみた。
<?php use Faker\Factory as Faker; class FakerSeeder extends Seeder { public function run() { $faker = Faker::create(); foreach(range(1, 100) as $index){ Title::crate(['name' => $faker->name]); } } }
workbenchのcomposer.jsonに最初に作ったseedsフォルダのパスを記述する。
"autoload": { "classmap": [ "src/controllers", "src/database/seeds", "src/migrations", "src/models", "src/views" ] }
dump-autoloadする。これで準備完了。
php artisan dump-autoload
あとはphp artisanで db:seedを実行する。
php artisan db:seed --class=FakerSeeder