20190820のlaravelに関する記事は4件です。

LaravelのEloquentで最初のn件とn件目以降のデータを取得する

Eloquentで最初の5件を取得

最初の5件を取得するには take メソッドが便利。

$datas = Model::where('hoge', 0)->get();

// 最初の5件
$datas->take(5)

Eloquentで最後の5件を取得

最後の5件を取得するなら splice が便利だ

$datas = Model::where('hoge', 0)->get();

// 最初の5件を削除した残り
$datas->splice(5)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelで.vimrc.localのnoexpandtabが効かなかった

先に結論

Laravelインストール時に設置されていたeditorconfigが効いているだけでした。

経緯

Laravelでbladeファイルをタブインデントにしたかったので、以下の.vimrc.localを設置したが効かなかった。

.vimrc.local
if &filetype == "blade"
    set noexpandtab
endif

原因の確認

vim上で以下のコマンドを叩いて、インデントの設定で何が優先されているのかを確認。

:verbose set expandtab?
noexpandtab
        最後にセットしたスクリプト: ~/.vim/bundle/editorconfig-vim/plugin/editorconfig.vim545

Laravelのプロジェクトルートディレクトリにある.editorconfigが優先されていた。

.vimrc.localをやめて.editorconfigに以下を追記することで解決。

.editorconfig
[*.blade.php]
indent_style = tab
indent_size = 3
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】setVisibilityで権限はどう変わるのか

Laravelで保存したファイルに権限を設定することができる。

setVisibilityというメソッドを使うことで、ユーザから見れるようにするかどうかという設定を変えるものである。

使い方は、

Storage::->setVisibility($file_path, 'private or public');

となる。

Storageはローカル環境ならローカルに、本番環境ならs3にするなど、環境変数で振り分けたりする。

provateとpublicの権限の違い

protected static $permissions = [
    'file' => [
        'public' => 0644,
        'private' => 0600,
    ],
    'dir' => [
        'public' => 0755,
        'private' => 0700,
    ]
];

上記のように設定されているので、publicならユーザからも見ることができるし、privateだとユーザからは見ることができない。

画像の使い道は、アイコンとか、商品画像が多いような気がするのでpublicでいいんじゃないかなと思うが、管理画面でしか使わない画像など、見せたくない画像があった時は、privateにしておく方が良いと思う。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel 5.8 -> 6.0 LTS Upgrade Guide が更新されました!

こちらのツイートの通り、 Laravel 6.0 は LTS サポートになる予定とのことです。

そして、 Laravel 5.8 から 6.0 へのアップグレードガイドも更新されました(リリースまでもう少し更新が入るかもしれません)。

以下、要約。

Upgrade dependencies

composer.jsonlaravel/framework の依存を ^6.0 にして composer update をかけます。

6.0 から SemVer を採用するので、 7.0 になるまで破壊的変更は含まれない予定となっています。そのため、バージョン指定は 6.0.0~6.x.x となる ^6.0 を指定する形になります。

もちろん、このアップグレードがほかの dependencies で対応しているかしっかりと確認する必要があります。これは以前からのアップグレードと同様です。

特に今回は 5.8 から 6.0 へのアップグレードのため、多くのライブラリは laravel/framework: ^5.6 といった形で依存していて、しっかりとした更新対応が入るまでアップグレード出来ないのではないでしょうか。

認可処理

Authorized Resources

$this->authorizeResource(Post::class, 'post'); のような形でリソースコントローラに対してコンストラクタでポリシーを設定している場合、 index メソッドは元々認可をスルーしていましたが、 viewAny メソッドをポリシークラス側に定義しない限り認可で拒否されるように変更になりました。

RegisterController

RegisterController の register registered メソッドを上書きしている場合は、親メソッドを呼ぶ必要が出てきました。イベントの発行場所なども変わっているので注意が必要です。

Authorization Responses

Illuminate\Auth\Access\Response クラスが変更になりました。

Database

プライマリキー型定義

パフォーマンス最適化のため、 protected $keyType = 'string'; のように、 string 系の型をプライマリキーとして保持している場合は、このプロパティを指定する必要が出ました。

Email 確認

email/resend ルーティングが GET から POST に変わりました。そのため、 view 側で CSRF を追加するなどの修正が必要です。

ヘルパー

str_plugarray_get などのヘルパー関数が今まで src/Illuminate/Support/helpers.php に実装されていましたが、 Illuminate\Support\Str または Illuminate\Support\Arr の静的メソッドを使うことが推奨されるようになりました。

また、 composer require laravel/helpers として別パッケージ化されたそれらのメソッドを要求することも可能です。

Localization

Lang::transLang::get に、 Lang::transChoiceLang::choice にメソッド名が変更になりました。

Lang::getLang::getFromJson は同じ扱いになったので、 Lang::getFromJson ではなく Lang::get を呼ぶことが推奨されるようになりました。

__('foo')@lang('foo') を使っている場合は特に変更は不要ですね。

キュー

php artisan queue:work を今まで呼んだ場合、失敗したジョブを無限に繰り返すようになっていました。今後は 1 度のみ再実行されます。無限に再実行したい場合は --tries=0 を指定します。

Input Facade

Input Facade は削除されました。 Input::get を使っていた場合は Request::input を使ってください。 Input はそのまま Request Facade に置き換え可能です。


他にも規模の小さい破壊的変更がありますが、ごらんのとおり今までと同じレベルの変更度合いですね。安心しました。

今後は 6.0.0 も 6.9.10 も同じコードで利用出来るようになるはずです(セキュリティリリースなど致命的なものは除く)。

また、大体半年置きにメジャーアップデートが行われていましたが、それは継続するようなので、恐らく来年の2月くらいに Laravel 7.0 が出るのではないかと思います。

※上記のリリースノートはまだ途中のものなので、今後他にも破壊的変更が含まれる可能性があることに注意してください。
※上記は要約で省略している部分もあります。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む