LoginSignup
0
1

More than 3 years have passed since last update.

Laravel学習用備忘録

Last updated at Posted at 2020-07-14

この記事の主目的は、自分(筆者)のための備忘録である。
筆者は初心者であるため、本記事は正確ではないことをご了承いただきたい。

なお、参考にしたのは、
1. https://awesome-linus.com/2019/06/05/laravel-tutorial-basic-from-zero
2. https://www.hypertextcandy.com/laravel-tutorial-introduction
3. https://www.techpit.jp/courses/enrolled/777553
の3つの記事である。
不具合が生じるときは、上記の記事を参考にすること。

プロジェクト作成、sqliteの設定まで。

データベースはファイル一つで管理可能なsqliteを使用することにする。
前提:windowsにphp, composer, sqlite3がインストールされている。

  1. プロジェクト作成

    1. VS Codeのパワーシェルを起動
    2. cdコマンドでプロジェクトを作りたいところまで移動(laravel学習用フォルダあり)
    3. composer create-project laravel/laravel=[version数を指定(LTSの6が良いか)] [プロジェクト名]
    4. cd [プロジェクト名]
    5. php artisan serveのあとに、http:127.0.0.1:8000にアクセスでロケットが出ればOK。
  2. sqliteの設定

    1. ni database/database.sqlite 注)niは新しいファイルを作成するコマンド。touchはパワーシェルで使用できない。
    2. .envファイルを次のように変更。
.envDB
DB_CONNECTION=sqlite
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=homestead
# DB_USERNAME=homestead
# DB_PASSWORD=secret

これでとりあえず、始められるようになった。

その他の備忘録

コントローラーの作成

  • php artisan make:controller [コントローラ名]ですよ!
  •  命名規則は単数でも、複数でも良いみたい。ただし名前の最後はControllerとすることは忘れないように。
  •  php artisan make:controller ArticleController --resourceとすると、CRUDがすぐに作れるようなファンクション名をつけてコントローラを作ってくれる。
  •  ルーティングにRoute::resourece('articles', 'ArticleController')とすると、--resourceオプションを付けて作ったコントローラのfunctionと一致するので便利。

マイグレーションファイルの作成からテーブルの作成(マイグレート)まで

  • 下記コマンドを実施。ただし、「pets」のところは任意のテーブル名にすること。
  • php artisan make:migration create_pets_table --create=pets
  • /database/migrations/内に今作ったcreate_pets_tableあり。その中を編集して、テーブルを定義する。
  • php artisan migrateでマイグレートを実行。テーブルができた。
  • ※なおマイグレーション実行後に、前の状態に戻したいときは、php artisan migrate:rollbackを実施。改めてマイグレーションファイルを直して、マイグレートする。

外部キーを参照するカラムの作成時

  • articlesテーブルにusersテーブルのidを参照する、user_idというカラムを作る。
    • articlesマイグレーションファイル内に、$table->foreign('user_id')->references('id')->on('users');を記述する
    • このとき、外部キーにusersテーブルの主キーidと関連付けて、user_idとすると、このあとの処理が楽になる。
    • Articleモデルにリレーションを記述する(参考3を参照する)。

モデルの作成

- モデルを作成するというのは、ORM対応することみたいなイメージなのかな。
- 上で作ったpetsテーブルに対応する、Pet モデルクラスを作成することで、勝手にLaravelさんが認識してくれるらしい。php artisan make:model Petポイントは、テーブル名は複数形、modelクラスは単数形ということ。
- モデルの作成に失敗したとき:よくわからんが、テーブルを消す、マイグレーションファイルを消す→composer dump-autoloadを実行(名前空間の再読込らしい)→再度マイグレーションファイルの作成→モデル定義→マイグレートを実施する。
- データベースをやり直したい場合は、resetなどを駆使するみたい。今度調べよう。

入力値のガード

 モデルを作成したら、以下のように記述して、入力値以外を入れられないようにする。

Article.php
class Article extends Model
{
    protected $fillable = [
        'title', 'text'
    ];
}

リレーションの追加

ユーザーテーブルと記事テーブルが1対多の関係にある場合、Articleモデルに以下のように記述してリレーションする。

Article.php
class Article extends Model
{

中略

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

逆にUserモデルに以下のように記述する。

User.php
class User extends Authenticatable
{
中略

public function articles()
    {
        return $this->hasMany('App\Article');
    }

使い方は、
$article->user;でユーザーインスタンス、
$article->user->name;でユーザーのnameプロパティが返る。
$user->articles;でarticlesプロパティが得られ、Laravelの仕組みで自動的にコレクションが返るようになる。foreach等で使える。
$user->articles()->where('title', 'foo')->first()のように、articlesメソッドにして、チェーンでクエリビルダをつなげて、データを取得できる。

sqliteの操作

  • sqlite3 [sqlファイルのパス名]で選択したsqlファイルを操作できるようになる
  • プロンプトに>sqliteと出たら、sqliteコマンドを打てる状態
    • .tableでテーブル一覧を取得
    • .schema [テーブル名]でテーブル定義を確認
    • select * from [テーブル名];(セミコロン忘れないで!)
  • この記事を参照すると良さそう → SqliteでDBの中身を確認

テーブルにテストデータを挿入する

  • シーダーを使ってみる
    • php artisan make:seeder FoldersTableSeeder 「Folders」の部分は適宜自分のテーブル名(複数形)にする
    • 詳細はこの記事を参照。
  • その他にコントローラーにデータを配列で記載するのもあり。その際は配列の前に(object)をつけること。Laravelで受け取るのは配列型ではなく、オブジェクト型だからだそうだ。$sample_datas = [(object)[連想配列], (object)[連想配列],];

アクセサの使い方

  • モデルクラスの作成時はプロパティにカラムデータを持っていない。
  • モデルクラス内の$attributesというプロパティで配列で管理されている。
  • アクセサとは、get〇〇Atributeというメソッドを定義することで、あたかもデータをモデルクラスのプロパティとして値を取得できるようになる。
  • 例えば、Personテーブルにfavoriteカラムが定義されているとする。favoriteカラムのデータを取得したいときは以下のようにする。Personモデルクラス内でpublic function getFavoriteTextAttribute(){処理};を記述して、コントローラーやテンプレートで使うときに$person->favorite_text;とする。注意として、定義時はキャメルケース、使用時はスネークケースとすること。

コレクション

  • コントローラ等でモデル名::all()とすると、コレクションを返す。
  • コレクションとは、配列を拡張したもので、Laravelに用意されたクラスのこと。
  • 配列と同様に扱え、さらに配列にはない様々なメソッドを使うことができる。
  • sortByDesc()などもコレクションで使えるメソッドの一つ。

@エクステンド、イールドの使い方

  • ベースファイルを作る。埋め込む予定のところに@yield('[section名]')を記しておく。
  • 各viewファイルにベースを呼び出すために、@extends('[ベースviewファイル名]')を記す。
    • 埋め込みたい部分を@section('[section名]')~@endsectionで記す。
  • @include[view名]で他のviewを読み込みできる。

改行込みの文章をbladeでそのまま表示する方法

ブレードファイル内で$hogeが改行を含む文章としたら、{!! nl2br(e( $hoge )) !!}とすることで、改行を含むそのまま表示できる。

Tinker

  • php artisan tinkerをすると、Laravelのシェルが開かれる。そこでは、laravelメソッドがつかえるとのこと。

ユーザー認証

  • Laravelに標準でついているものを最初は使っていく。参考3をみること。
  • php artisan route:listですでにルーティングされているものが確認できる。ユーザー認証に関するルーティングもこれで確認できる。
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1