knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

Laravel 5.8で、予定表の機能追加 #php #Laravel

index:

概要:

前の Laravel 5.8 関係で、
Carbon を使用して、予定管理の機能追加となります。

環境

php7.3
Laravel 5.8
mysql

参考のコード

github.com

画面

・top
f:id:knaka0209:20200101144836p:plain

・追加
f:id:knaka0209:20191228203908p:plain

migrate

https://github.com/kuc-arc-f/lara58a_4plan/blob/master/database/migrations/2019_12_24_164755_create_plans_table.php

    public function up()
    {
        Schema::create('plans', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->bigInteger('user_id')->nullable(false);
            $table->date('date')->nullable()->comment('予定の日付');
            $table->text('content')->nullable()->comment('内容');;
            $table->timestamps();
            $table->softDeletes();
        });
    }

Update

・2020/01/01
TOP/月の移動方法を、INPUT type=month を追加し。
 指定月に、移動できるように修正。しました

・Update 2020/02/15
上記の、予定表の機能のデモページを追加しました
https://knaka0209.net/plans
 ( guest@kuc-arc-f.com / password 、でログインできます)

Raspberry Pi+ docker に、Laravel 5.8を設置する。

index:

概要:

前の Laravel 5.8 関係で、
raspbery pi+ docker環境 で、Laravel 5.8追加する内容となります

・使用する面で、docker-compose 起動が遅かったり。
 いまいちな面が、ありましたので。参考程度となります

・composer 実行も、作業時間が1時間以上は経過してたと思いますので
 注意が必要です。

環境

raspbery pi 2
php7.3
Laravel 5.8
mysql
docker
docker-compose

参考の docker 設定

github.com

参考のページ

knaka0209.hatenablog.com

追加の手順

インフラ側は、前回の docker-compose
で、起動したコンテナ使います

・Laravel 5 の追加
コンテナで、作業 の開始

docker-compose exec app /bin/bash

・Laravel の追加

php composer.phar create-project --prefer-dist laravel/laravel myblog "5.8.*"
php composer.phar require laravelcollective/html "5.8.*"

・ここで、composer で、メモリ関係エラーが出る場合、
一旦、コンテナを停止して。docker run で起動しました

メモリ領域、256Mだと失敗しましたので。512Mに変更

docker run -m 512m -it -v /home/pi/work/docker/docker_raspi_lara58:/var/www/html docker_raspi_lara58_app /bin/bash

・再度、create-projectで。インストール完了
http://設置したIP/ で、laravel 起動できました。

f:id:knaka0209:20191223135342p:plain

Laravel 設定

前の、ubuntu版と同じ .envですが。DB_HOST=db 
で、接続できました

.env

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

migrate 実行

php artisan migrate

create_usersで、エラーが出ましたが。表は作成されていたので
 2014_10_12_000000_create_users_table.php を削除して、他のmigrate実行してみましたが。
 問題なく、モデルも使用できました

===========================
root@e4c2159cf43b:/var/www/html/myblog/database/migrations# rm -r 2014_10_12_000000_create_users_table.php
root@e4c2159cf43b:/var/www/html/myblog/database/migrations# cd ../../
root@e4c2159cf43b:/var/www/html/myblog# php artisan migrate
Migrating: 2019_12_01_081526_create_tasks_table
Migrated: 2019_12_01_081526_create_tasks_table (0.08 seconds)
Migrating: 2019_12_12_020837_create_books_table
Migrated: 2019_12_12_020837_create_books_table (1.7 seconds)
Migrating: 2019_12_14_082209_create_depts_table
Migrated: 2019_12_14_082209_create_depts_table (0.1 seconds)
Migrating: 2019_12_14_082310_create_members_table
Migrated: 2019_12_14_082310_create_members_table (0.06 seconds)
Migrating: 2019_12_17_001753_create_todos_table
Migrated: 2019_12_17_001753_create_todos_table (1.61 seconds)

まとめ

CRUD等の画面を開くと。やや重く。
上記の、docker-compose up -d 起動も遅いのですが。
連続稼働で、ほぼ停止しない場合は、
低コスト小型PCで、省電力で。良い面もありそうですね

Raspberry Pi に docker環境を設置する

index:

概要:

前の Laravel 5.8 関係で、
raspbery piに docker環境 追加するメモとなります
構成は、php7.3 ,mysql , nginx

・下記の、docker-compose 追加が作業時間が多めでした。。
 参考までに。数時間かかったので 要注意です。

環境

raspbery pi 2
php7.3
Laravel 5.8
mysql
docker
docker-compose

version

pi@raspberrypi:~/tmp $ uname -a
Linux raspberrypi 4.14.98-v7+ #1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU/Linux

pi@raspberrypi:~/tmp $ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

pi@raspberrypi:~/tmp $ docker --version
Docker version 19.03.5, build 633a0ea

docker-compose 追加

ビルドは、1時間以上 だった気がします。

git clone https://github.com/docker/compose.git
cd compose
git checkout 1.25.0

./script/build/linux

・バイナリが、ビルドされるようです

$ cd dist
$ ./docker-compose-Linux-armv7l version

/usr/local/bin にコピーする場合、

$ sudo cp docker-compose-Linux-armv7l /usr/local/bin/docker-compose
$ cd /usr/local/bin
$ sudo chown root:root docker-compose
$ sudo chmod 755 docker-compose

参考のdocker 設定

github.com

参考の docker-compose.yml

https://github.com/kuc-arc-f/docker_raspi_lara58/blob/master/docker-compose.yml

version: '3'

services:
 web:
    build: ./docker-nginx
    ports:
        - 80:80
    depends_on:
        - app
    volumes:
        - ./:/var/www/html
        - ./docker-nginx/default.conf:/etc/nginx/conf.d/default.conf
    links:
        - app
 app:
    build: ./docker-php
    depends_on:
        - db
    links:
        - db
    volumes:
        - ./:/var/www/html
 db:
    image: hypriot/rpi-mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root         #
      MYSQL_DATABASE: laravel         #
      MYSQL_USER: db_user           #ユーザ名
      MYSQL_PASSWORD: password   #ユーザ用パスワード

コンテナ起動

docker-compose up -d

・こちらも、以上30分以上は。起動処理が継続してました。注意です

・nginx がタイムアウトになる場合が、有りましたが。
再度、起動すると。エラーが消えました

============================
ERROR: for docker_raspi_lara58_web_1 UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)

ERROR: for web UnixHTTPConnectionPool(host='localhost', port=None): Read timed out. (read timeout=60)
ERROR: An HTTP request took too long to complete. Retry with --verbose to obtain debug information.
If you encounter this issue regularly because of slow network conditions, consider setting COMPOSE_HTTP_TIMEOUT to a higher value (current value: 60).

============================

参考ページです

knaka0209.hatenablog.com

Laravel 5.8 +mysql + nginxで、docker環境の設置編

index:

概要:

前の Laravel 5.8 関係で、
docker環境の ,ubuntu16 構築等のメモとなります

環境

php7.3
Laravel 5.8
mysql 5.7
docker
docker-compose
ubuntu 16 / VirtualBox

参考の設定

github.com

参考

docker追加方法は、省略しますが。下記参考しました

https://qiita.com/ossan_pg/items/2d2ff8e9ee13ea32b3ab

https://docs.docker.com/install/linux/docker-ce/ubuntu/

・Dockerfile 等の参考
https://qiita.com/bzy/items/f251d47cba836a3a92df

version

$ docker --version
Docker version 19.03.5, build 633a0ea838

$ docker-compose --version
docker-compose version 1.22.0, build f46880fe

Dockerfile など

・docker-compose.yml
https://github.com/kuc-arc-f/docker_lara58/blob/master/docker-compose.yml

version: '3'

services:
 web:
    build: ./docker-nginx
    ports:
        - 80:80
    depends_on:
        - app
    volumes:
        - ./:/var/www/html
        - ./docker-nginx/default.conf:/etc/nginx/conf.d/default.conf
    links:
        - app
 app:
    build: ./docker-php
    depends_on:
        - db
    links:
        - db
    volumes:
        - ./:/var/www/html
 db:
    image: mysql:5.7.19
    volumes:
        - ./db/mysql_data:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root         #
      MYSQL_DATABASE: laravel         #
      MYSQL_USER: db_user           #ユーザ名
      MYSQL_PASSWORD: password   #ユーザ用パスワード

php
https://github.com/kuc-arc-f/docker_lara58/blob/master/docker-php/Dockerfile

・nginx
https://github.com/kuc-arc-f/docker_lara58/blob/master/docker-nginx/Dockerfile

手順など

docker追加、設定完了後

最初は、時間かかります。
URLは 、http://localhost/
で、nginx が開きます。

docker-compose up -d

Laravel 5 追加

docker 側に、ログインします

docker-compose exec app /bin/bash


composer 追加

php -r "readfile('https://getcomposer.org/installer');" | php

Laravel 追加

php composer.phar create-project --prefer-dist laravel/laravel myblog "5.8.*"
php composer.phar require laravelcollective/html "5.8.*"

・ヘルパは、後回しで。
migrate成功後でも、良いかと思います。


http://localhost/ で、Laravel 起動できます

Laravel 設定

.env

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=root

・DB周りですが、DB_HOST=localhost 等は、
docker の場合、接続出来ませんでしたので、
docker mysqlコンテナ名 (db) に、変更しています。

失敗時は、下記のような。Connection refusedエラーが出力されていました
====================
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema

migrate

php artisan migrate

・成功すれば、モデル等使えると。思います
mysql 8.0 は、接続認証等のエラーで初期は、NGでしたが。
今回は、 mysql 5に、変更しています。

mysqlにroot ログインして、接続や確認を行う場合。下記参考です

docker-compose exec db /bin/bash

mysql -u root -proot laravel

Laravel 5.8 + Vue.jsで、todo機能、markdown表示対応

index:

概要:

前の Laravel 5.8 関係で、
Laravel版の、一部 Vue.jsで実装した形になります。

環境

php7.3
Laravel 5.8
mysql
Vue.js

参考のコード

github.com

実装など

API
https://github.com/kuc-arc-f/lara58b_vue2_todo/blob/master/app/Http/Controllers/ApiTodosController.php

    public function index()
    {   
        $todos = Todo::orderBy('id', 'desc')->get();
        return response()->json($todos);
    }

Blade

未完了、完了の切替 表示など
https://github.com/kuc-arc-f/lara58b_vue2_todo/blob/master/resources/views/todos/index.blade.php

    new Vue({
        el: '#app',
        created () {
            this.getTasks(0);
        },    
        data: {
            todos : [],
            items : [],
        },
        methods: {
            getTasks (complete) {
                this.items = []
                axios.get('/api/apitodos')
                .then(res =>  {
                    this.items = res.data
//console.log(res.data )
                    this.convert_todos(this.items, complete)
                })            
            },
            convert_todos(items, complete){
                var ret = []
                items.forEach(function(item){
                    if(item.complete == complete){
                        ret.push(item)
                    }
                });
                this.todos = ret
//console.log(ret);
            },
            change_items(complete){
                this.convert_todos( this.items, complete)
            },
            delete_todo(id){
console.log(id);
                $("#delete_id").val(id);
                document.form_delete.submit();

            },

        }
    });

画面

f:id:knaka0209:20191218114016p:plain

参考のページ

knaka0209.hatenablog.com

Laravel 5.8 で、todo機能、markdown表示対応

index:

概要:

前の Laravel 5.8 関係で、
todo機能の追加、markdown 対応表示等の実装
となります

環境

php7.3
Laravel 5.8
mysql

参考のコード

github.com

画面

・詳細
f:id:knaka0209:20191217150314p:plain

・一覧
f:id:knaka0209:20191217150433p:plain

実装など

・コントローラ
https://github.com/kuc-arc-f/lara58a_3todo/blob/master/app/Http/Controllers/TodosController.php

    public function index(Request $request)
    {   
        $complete = 0;
        $inputs = $request->all();
        if(isset($inputs["complete"]) ){
            $complete = $inputs["complete"];
        }
        $todos = Todo::orderBy('id', 'desc')
        ->where("complete" , $complete)
        ->get();
//        ->paginate(10 );
        return view('todos/index')->with('todos', $todos );
    }

Blade

・詳細, markedのライブラリでMD変換しています。
https://github.com/kuc-arc-f/lara58a_3todo/blob/master/resources/views/todos/show.blade.php

$(function() {
    //MD_convert
    var content = $("#content-hidden").val();
    content= marked(content);
//    console.log(content);
    $("#content_wrap").append(content);
});

Update

・Update 2020/02/15
上記の、TODO 機能のデモページを追加しました
https://knaka0209.net/todos
 ( guest@kuc-arc-f.com / password 、でログインできます)

Laravel 5.8 で、Transactionで DB一括登録など

index:

概要:

前の Laravel 5.8 関係で、
Transactionを、使用して保存で
複数の関連テーブル保存を、一括して行う例となります

環境

php7.3
Laravel 5.8
mysql

参考のコード

github.com

準備など

・表の作成
 Member, Dept

コントローラ

https://github.com/kuc-arc-f/lara58a_2/blob/master/app/Http/Controllers/DeptsController.php
・親テーブル Dept, 下層の Member
 を同時に保存し、コミットします


    /**************************************
     *
     **************************************/    
    public function store(Request $request)
    {
        $inputs = $request->all();
        DB::beginTransaction();
        try {
            $dept = new Dept();
            $dept->fill($inputs);
            $result = $dept->save();
//debug_dump($dept->id );
            if($result && isset($inputs["member"]) ){
                $this->save_members($inputs["member"], $dept->id);
            }
//exit();
            DB::commit();
        } catch (\Exception $e) {
            DB::rollback();
        }