NO IMAGE

XAMPPでLaravelの作業メモ01

いつも忘れるので、備忘録

 

環境構築

1.composerをインストール

composer 

https://getcomposer.org/download/

2.laravelをインストール

XAMPPのshellかパワーシェル上でhtdocsへ移動し、目的の場所に行き、コマンドを打つ

今回はXAMPP上でhtdocs内にblogというプロジェクトを作る。

// Laravelインストール

# composer global require laravel/installer 

composer create-project --prefer-dist laravel/laravel laravel
// もしくは
composer create-project laravel/laravel プロジェクト名 --prefer-dist
//
# laravel new laravel_app

 

以下 CRUD 参考

こっちのほうがわかりやすいか
Laravel 学習中
https://laraweb.net/basic_knowledge/

 

データベースの設定: マイグレーション

手順

  1. データベース側設定
  2. マイグレーションファイルの作成 :データベースの設計するファイル
  3. マイグレーションファイルの編集 :データベースへどういったファイルを入れるか書く
  4. マイグレーション実行:データベースへ反映
  5. サンプルデータを入れる。

 

データベース側設定

まずは、データベースを作り、そして表示させてみるか

今回 abcというプロジェクトを作る。

c:\xampp\htdocs
# laravel new abc

---(省略)----

Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
Application ready! Build something amazing.

次にデータベース連携の.env にXAMPPの連携を修正

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=abc
DB_USERNAME=abc_admin
DB_PASSWORD=abc_admin!

XAMPP側にもユーザ用意してテーブルも用意しておく
照合順序はutf8mb4_binに。

@see  laravel使うならmysqlのcollation指定はutf8mb4_binにしておくべき

マイグレーションファイルの作成

早速、実行

php artisan make:migration マイグレーションファイル名 
# 例 php artisan make:migration create_users_table

 

お、エラー

# php artisan make:migration create_users_table

   InvalidArgumentException  : A CreateUsersTable class already exists.

  at C:\xampp\htdocs\abc\vendor\laravel\framework\src\Illuminate\Database\Migrations\MigrationCreator.php:90
    86|             }
    87|         }
    88|
    89|         if (class_exists($className = $this->getClassName($name))) {
  > 90|             throw new InvalidArgumentException("A {$className} class already exists.");
    91|         }
    92|     }
    93|
    94|     /**

A CreateUsersTable class already exists.ってんだからもうあるってことかデフォとのあれか

じゃ、違うテーブルを用意するか

今回は見積もり書システムなので、そのままmitsumori

# php artisan make:migration create_mitsumori
Created Migration: 2020_01_11_092917_create_mitsumori

おk

イグレーションファイルの編集 :データベースへどういったファイルを入れるか書く

出来たファイルを見てみると

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMitsumori extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('mitsumori', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
       // ■ ここにカラムを追加していく
       });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('mitsumori');
    }
}

ざっくり必要なカラムを設計すると

// 思案(´・ω・)ス というか思案
見積書番号:
お客様名 :
弊社担当者:
タイトル :
取引条件 : 銀行振り込みとか・何日支払いとか
納品予定日: 受注後○週間以内とか
お見積り日:
有効期限日:
納品場所 :
小計額 :
消費税 :
原価率    :
税率  :
合計金額:
備考欄  :

上記13項目と
品名、品名数量、単位、単価、原価、金額、利益額、が25個、
※見積条件
という項目は削除し、相手に出す見積もりだが、原価が計算が必要なので、
それぞれ追加した。カラムが結構あるな、

まずは必要な部分だけ作るか。

見積書番号:
お客様名 :
弊社担当者:
タイトル :
小計額 :
消費税 :
税率  :
合計金額:
タイプスタンプ:
……この9個作る。

見積書番号:
$table->bigIncrements(‘id’);
必須と8桁のゼロフルにしたい。オートインクリメントにしたい。

参考:laravelのmigrationでintのカラムが勝手にAutoIncrementにされてハマった話
https://qiita.com/haruraruru/items/8ed08a5dfd719ebb9a2e
https://readouble.com/laravel/5.5/ja/migrations.html

Laravelが5になってもmigrationにZEROFILLは対応してないので、
migrationに直接SQL書いて実行というパターンは変わらないです。
https://www.kaasan.info/archives/3864

じゃ、整数でオートインクルメントでいいか。

            $table->bigIncrements(‘id’);       //見積書番号
            $table->string(‘customer’);        //お客様名
            $table->string(‘staff’);           //弊社担当者:
            $table->string(‘title’);           //タイトル :integer
            $table->integer(‘sub_total’);      //小計額 :マイナスもあるかもなので、
            $table->integer(‘tax’);            //消費税額
            $table->tinyInteger(‘tax_rate’);   //税率
            $table->integer(‘total’);          //合計金額:
            $table->timestamps();              //タイムスタンプ

せっかくならコメント入れておくか。

        Schema::create('mitsumori', function (Blueprint $table) {
            $table->bigIncrements('id')     ->comment('見積書番号');
            $table->string('customer')      ->comment('お客様名');
            $table->string('staff')         ->comment('弊社担当者');
            $table->string('title')         ->comment('タイトル');
            $table->integer('sub_total')    ->comment('小計額');
            $table->integer('tax')          ->comment('消費税額');
            $table->tinyInteger('tax_rate') ->comment('税率');
            $table->integer('total')        ->comment('合計金額');
            $table->timestamps();
        });

 

※上記timestampsでエラーで迷走した。

マイグレーション実行:データベースへ反映

php artisan migrate

なんかエラーが出た

以下エラーの記録(´・ω・)ス

 

   Symfony\Component\Debug\Exception\FatalThrowableError  : Call to a member function comment() on null

  at C:\xampp\htdocs\abc\database\migrations\2020_01_11_092917_create_mitsumori.php:25
    21|             $table->integer('sub_total')   ->comment('小計額');
    22|             $table->integer('tax')         ->comment('消費税額');
    23|             $table->tinyInteger('tax_rate')->comment('税率');
    24|             $table->integer('total')       ->comment('合計金額');
  > 25|             $table->timestamps()           ->comment('タイムスタンプ');
    26|         });
    27|     }
    28|
    29|     /**

なんぞ?
Call to a member function comment() on null
ああ、カラム名が入ってないや。
タイムススタンプ空でおk

        Schema::create('mitsumori', function (Blueprint $table) {
            $table->bigIncrements('id')     ->comment('見積書番号');
            $table->string('customer')      ->comment('お客様名');
            $table->string('staff')         ->comment('弊社担当者');
            $table->string('title')         ->comment('タイトル');
            $table->integer('sub_total')    ->comment('小計額');
            $table->integer('tax')          ->comment('消費税額');
            $table->tinyInteger('tax_rate') ->comment('税率');
            $table->integer('total')        ->comment('合計金額');
            $table->timestamps('insert_at') ->comment('タイムスタンプ');
        });
    }

 

またコケた

  Illuminate\Database\QueryException  : SQLSTATE[42000]: 
Syntax error or access violation: 1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax 

なんぞ?

@SEE
php artisan migrate でずっこけたとき
https://qiita.com/oishis/items/88744f017601f3084ab7
最後に消して……だめか

無事にマイグレーションができたところで、DB確認ちゃんとカラムあること確認

次にダミーデータを入れてみる。

サンプルデータを入れる

1.シーダーファイルを作成
2.シーダーファイルの run() にサンプルデータを記述
3.DatabaseSeeder.php でシーダーファイルをコール
4.シーダーの実行

シーダーファイルを用意

php artisan make:seed mitsumoriTableSeeder

// 実行
# php artisan make:seed mitsumoriTableSeeder
Seeder created successfully.

コマンドを実行すると database/seeds/ に mitsumoriTableSeeder.php(シーダーファイル) が作成された。このファイルを編集してデータを入れる。

シーダーファイルの run() にサンプルデータを記述

<?php

use Illuminate\Database\Seeder;

class mitsumoriTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //ここにデータを記載



    }
}

 

これだといちいちデータを作るのか、調べると

seeder(シーダー)・・ダミーデータを登録できる
faker(フェイカー)・・ダミーデータを生成できる
factory(ファクトリー)・・ダミーデータの量産装置

らしい。

少しのデータならシーダでいいが、大量なのでfaker(フェイカー)とfactory(ファクトリー)を使うか。

php artisan make:factory MitsumoriFactory

//実行
# php artisan make:factory MitsumoriFactory
Factory created successfully.

/database/factories/MisumoriFactory.php というファイルができる。

TOOD ここはあと回しに。ダミーデータ作るのが面倒

 

INSERT INTO `mitsumori` (`id`, `customer`, `staff`, `title`, `sub_total`, `tax`, `tax_rate`, `total`, `created_at`, `updated_at`) VALUES
(NULL, 'お客様名01', '1', 'お見積り1タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名02', '1', 'お見積り2タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名03', '1', 'お見積り3タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名04', '1', 'お見積り4タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名05', '1', 'お見積り5タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名06', '1', 'お見積り6タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名07', '1', 'お見積り7タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名08', '1', 'お見積り8タイトルの件', '10000', '1000', '10', '11000', '', ''),
(NULL, 'お客様名09', '1', 'お見積り9タイトルの件', '10000', '1000', '10', '11000', '', '');

これを一覧表示させてみる。

データベースから読み込み込んで一覧にしてみる

サーバ起動

このままだとXAMPPなので、URLが http://localhost/abc/public/なので、サーバを起動。
Laravelで作られたディレクトリー内で、

php artisan serve

実行
# php artisan serve
Laravel development server started: http://127.0.0.1:8000


Ok,

ルーティングを使う

web.php

Route::get('/', function () {
    return view('index');
});

resources/views

わかりやすいルーティング

 

Route::get(‘/mitsumori’, function () {
    return view(‘mitsumori’);
// resources/views/mitsumoti.blade.php を読み出してくださいよと。
});

Viewはresources/viewsに記載
テンプレートはxxx.blade.php

View内に分ける場合、

  return view('mitsumori.index');   

  return view('mitsumori/index')ではない事に注意 スラッシュでなくてドットね。

メモ:ルーティングとビューでは処理が増えるので、コントローラーに書く
場所は/app/Http/Controllers/に書く

コントローラー書くにのは artisan を使う。

php artisan make:controller コントローラー名最初は大文字

例)php artisan make:controller HelloController


 

見積もりリストを作るコントローラーを作る。


# php artisan make:controller MitsumorilistController
//    ↑
//コントロール内にアクションを作るのでlistは無しね。
//    ↓ 作り直した(´・ω・)ス
# php artisan make:controller MitsumoriController


 

web.phpにルートを記載

Route::get('/mitsumori/', 'MitsumoriController@index');

 

Symfony\Component\Debug\Exception\FatalThrowableError
Class 'App\Http\Controllers\DB' not found
http://127.0.0.1:8000/mitsumori/

…とエラーがでるので、

use Illuminate\Support\Facades\DB;

上記をコントローラーに追加
参考:SQLクエリの実行
https://readouble.com/laravel/5.4/ja/database.html

コントローラーの記載は、

<?php

namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class MitsumoriController extends Controller
{
    //一覧表示用
    public function index(){
        $list = DB::select("SELECT * FROM `mitsumori`");
        var_dump($list);
    }


}

 


表示できた(´・ω・)ス

しかし、コントロールに書くのは次はモデルに記載する。

モデルを用意する記載する

モデルを作ると上記の$list = DB::select(“SELECT * FROM `mitsumori`”);という部分が省略できる。
早速モデルをartisanで作る。

php artisan make:model モデル名最初は大文字

実行してみる
# php artisan make:model Mitsumori
Model created successfully.

app ディレクトリ直下にMitsumori.phpができる。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Mitsumori extends Model
{
    //
}

次にコントローラーのappの中のモデルを指定、

SQLSTATE[42S02]: Base table or view not found: 1146 
Table 'abc.mitsumoris' doesn't exist (SQL: select * from `mitsumoris`)

またエラーかテーブル名が複数形じゃなければだめか

表示ができたぞ、OKだな。
モデルがあれば、DBは複数形は忘れないようにしないとな。

 

配列に入れて表示する

    //一覧表示用
    public function index(){
        $lists = Mitsumori::all();
        //$list = DB::select("SELECT * FROM `mitsumori`");
        //var_dump($list);
        foreach($lists as $list){
            var_dump($list->title);
        }

ここで、ビューを指定して渡すことができる。

ビューの渡された値を表示

find
findOrFail
action(

ここで基本のCRUDをもう一度作るか。

@View
@yield イールド
@section
https://readouble.com/laravel/5.5/ja/blade.html

よしここで再度記述し直すか

 

 

 

 

NO IMAGE
最新情報をチェックしよう!

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 37

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 38

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 39

  • Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 83

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 84

    Warning: Trying to access array offset on value of type bool in /home/xsvx1010357/kato.space/public_html/wp/wp-content/themes/the-thor/template-parts/single-prevnext.php on line 85
>最強のWordPressテーマ「THE THOR」

最強のWordPressテーマ「THE THOR」

システムの構築・保守運用「   」 社内システム担当が欲しいが、専属で雇うほどの仕事量はない。 必要な時に必要なだけ頼りたいというお悩みを持つ企業様へ専門知識を持って対応を行っております。 サーバから各種システムまで自社・他社で構築されたシステムに対してサポートを行っております。

CTR IMG