3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel メモ

Posted at

Laravelで掲示板作成の備忘録


モデルの取得

Eloquentモデル

データベーステーブルに情報を保存し、取得するために使用するモデルクラス


モデルと対応するデータベーステーブルを作成したら、データベースからデータを取得できるようになる。各Eloquentモデルは、対応するテーブルのデータベースへすらすらとクエリできるようにしてくれるクエリビルダだと考えると良い。


Eloquentのallメソッドはモデルテーブルの全レコードを結果として返す

$post = Post::all( );

Eloquentモデルでよく使うプロパティ

$connection

どのDB接続するのか。onメソッドで動的に変更可

$table

どのtableに対して処理するのか

$primaryKey

主キーの設定 id

$incrementing

主キーをオートインクリメントするかどうか

$timestamps

テーブルの作成、更新日時を自動更新

$fillable

渡した属性を複数代入させるかどうか(columnに値を入れたい場合必須)

$guarded

複数代入させないcolumnの指定($fillableと対)

$hidden

モデルを配列/JSON変換するときに隠蔽されるcolumnの指定

$visible

$hiddenと対


Eloquentモデルでよく使うメソッド

find

主キーを指定して検索

where

検索条件を指定 orWhere や引数でAND, OR検索ができる

count

件数を取得する

first

データを1件だけ取得する

toArray

データを配列に変換

toJson

データをJSONに変換

create, save

データの作成。createの場合は、モデルのfillableの設定が必須

insert

複数のデータを一括作成

update, save

データの更新

delete, destroy

データの削除。destroyは主キーを複数指定して削除可能


リレーション

関係
1:1 hasOne belongsTo
1:N hasMany belongsTo
N:N belongsToMany belongsToMany


デバッグログの使い方

出力したいカラムを持ってくる

$post = Post::find($post_id);
$posts = Post::all( );

出力する

Log::debug($post_id);


クエリーのログ

現在のリクエスト中に実行された全クエリーをメモリーにログしておくことが可能

クエリー(query)

クエリー【query】 データベース管理システム(DBMS)の操作に使われる命令。 さまざまな処理要求を照会言語という特定の文字列の組み合わせで表現し、データの検索・抽出・比較・並べ替えなどを行う。 クエリーを記述する代表的な照会言語としてSQLが広く使われる。
参照:コトバンク https://kotobank.jp/word/%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%BC-2888


ログを有効にする

DB::connection()->enableQueryLog();

実行済みのクエリーの配列を取得する

$queries = DB::getQueryLog();

出力

Log::debug($query);
[2017-09-07 11:28:39] local.DEBUG: array (
  0 =>
  array (
    'query' => 'select * from `posts` where `posts`.`id` = ? limit 1',
    'bindings' =>
    array (
      0 => '3',
    ),
    'time' => 2.75,
  ),
)


投稿フォームを作る際にFormクラスが見つからない

class 'Form' not found laravel

解決策

1.インストールコマンドでvendorに追加

composer require laravelcollective/html

composer.json に laravelcollective/html が追加され、インストールもされた

2.ProviderとAliaseを登録

config/app.php

    'providers' => [
...
        Collective\Html\HtmlServiceProvider::class,
...

    'aliases' => [
...
        'Form' => Collective\Html\FormFacade::class,
        'Html' => Collective\Html\HtmlFacade::class
...


validationクラスが見つからない

Class 'App\Http\Controllers\Validator' not found

解決策

validatorを使っている◯◯controller.phpに以下を追記

use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;

フォームリクエストとは

・フォームを含む各リクエストに対して、それぞれ固有のバリデーションを設定できる。

・バリデーションエラー時には、入力値とエラー情報を付与して前のページに自動的にリダイレクトする。

・バリデーションをパスした時に初めてコントローラー内の処理に移る。


validatorの使い方

・Validatorインスタンスが生成されたら、fails(もしくはpasses)メソッドを使用しバリデーションを実行

・バリデーションエラーが起きた場合、エラーメッセージと入力値がフラッシュデータとして保存され、入力を行ったページにリダイレクトするようなレスポンスが生成される。


//Validatorインスタンスが生成された場合
if ($validator->passes()) {
            $post = new Post;
            $post->title = Input::get('title');
            $post->content = Input::get('content');
            $post->name = Input::get('name');
            $post->save();
            return Redirect::back()
                ->with('message', '投稿が完了しました。');

        //エラーの場合
        }else{
            return Redirect::back()

                 //エラーを表示
                ->withErrors($validator)
                ->withInput();
        }


HTMLの要素にIDをつける

id属性で、要素に対してID(固有の識別名)を付けることができる

このIDは、スタイルシートのセレクタ(スタイルの適用対象)として使用されるほか、スクリプトやリンクなどの参照先として使用される

メリット

要素にidを割り振ることでjavascript, juery内で変数の受け渡しなどができるようになる

方法

idを割り振る

formタグにid    'content'を指定

<div class="form-group">
            <label for="aaa" class="">内容</label>
            <div class="">
                {{ Form::textarea('content', null, array('id' => 'content')) }}
            </div>
        </div>

他の箇所で使用する

<script>
                                $(function (){
                                    $("#modal_confirm").on("click", function(){
                                        var content_value = $("#content").val();
                                        $("#modal_content").html(content_value);
                                    });
                                });
</script>


親のタイムスタンプの更新

あるモデルが他のモデルに所属(belongsToもしくはbelongsToMany)しており、子のモデルが更新される時に親のタイムスタンプを更新できる

3
6
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
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?