knaka Tech-Blog

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

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();
        }        
       

Laravel 5.8 で、モデル結合など

index:

概要:

前の Laravel 5.8 関係で、
Eloquent の外部結合等です

modelアソシエーションでなく。
画面の、実行時に結合する形となります。

環境

php7.3
Laravel 5.8
mysql

準備など

・表の作成
 Member, Dept

コントローラ

https://github.com/kuc-arc-f/lara58a_2/blob/master/app/Http/Controllers/MembersController.php

・members.dept_id 、depts.id で結合します。

  • >join() で結合しています。
  • >leftJoin() とかも、可能のようです。
        $members = Member::select([
                    'members.id',
                    'members.dept_id',
                    'members.name',
                    'depts.name as dept_name',
                ])
                ->join('depts','depts.id','=','members.dept_id')
                ->paginate(5);

参考のコード

github.com

Laravel 5.8 ユーザー認証

index:

概要:

前の Laravel 5.8 関係で、
ユーザー認証の追加等になります。

環境

php7.3
Laravel 5.8
mysql

追加方法

php artisan make:auth

画面

f:id:knaka0209:20191211131129p:plain

/login で、起動できました。

認証チェックを、画面に追加

コントローラに、下記auth を追加。

https://github.com/kuc-arc-f/lara58a_2/blob/master/app/Http/Controllers/Controller.php

    public function __construct()
    {
        $this->middleware('auth');
    }

ページーション

TasksController

https://github.com/kuc-arc-f/lara58a_2/blob/master/app/Http/Controllers/TasksController.php

        $tasks = Task::orderBy('updated_at', 'desc')->paginate(5);
        return view('tasks/index')->with('tasks', $tasks);

validator

TasksController->store()

入力値の検証

        return Validator::make($data, [
            'title' => ['required', 'string', 'max:255'],
        ]);

参考のコード

github.com

Laravel 5.8 +Vue.js CRUD作成など

index:

概要:

前の Laravel関係になりますが
Laravel 5.8 + Vue.jsで、
CRUD作成となります。

・Vue-CLI, vue-router等使わずに、vue.js, axios 等で
 実装する方法としています。

環境

php7.3
Laravel 5.8
mysql
Vue.js

参考のコード

github.com

準備など

表作成等は、前回を参考にています

画面起動 URL は、前と同様の web.php です。

参考のページ

github.com

Laravel 5.8 設定編 CRUD作成など #php

概要:

Laravel 5.8 インストールや、CRUD作成など
となります。

環境

php7.3
Laravel 5.8
mysql

参考のコード

github.com

追加など

php composer.phar create-project --prefer-dist laravel/laravel lara58a "5.8.*"

helper:

php composer.phar require laravelcollective/html "5.8.*"

serve起動
php artisan serve

http://localhost:8000 で、画面起動できました。

artisanコマンドメモ

・サービス起動
 php artisan serve
・migrate実行
 php artisan migrate
・migrate作成
php artisan make:migration create_tasks_table --create=tasks
・ルーティング表示
php artisan route:list
・Controller追加
 php artisan make:controller TasksController
・model 追加
php artisan make:model Task
・auth追加
php artisan make:auth

TensorFlow.js + node/express , HTTP経由でモデル読込み、予測結果の出力

index:

概要:

前のTensorFlow.js 関係で、
node側で学習したモデルを、HTTP経由で読み込み
ブラウザ側で、評価する例となります。
前回と異なり。node側で評価しない構成です

環境

TensorFlow.js
node.js
Vue.js
Ubuntu16

参考のコード

github.com

実装など

expressに、htmlを配置しておきます
tf.loadLayersModel で、URL指定して。読み込めました

https://github.com/kuc-arc-f/tfjs_app1_express2/blob/master/public/train.html

async function run_train() {
    const data = await getData();
    var chart_dats = convert_chart_arr(data)
console.log(chart_dats.lbl.length )
    //return
    const tensorData = convertToTensor(data);
    const {inputs, labels} = tensorData;
    const model = await tf.loadLayersModel('http://localhost:3000/my-model/model.json');
    //pred
    const [xs, preds] = testModel(model, data, tensorData, 
                        chart_dats.lbl.length);
//    console.log( preds );
    //chart-disp
    var config = get_chart_config(chart_dats, preds);
    var ctx = document.getElementById('myChart').getContext('2d');
    window.myLine = new Chart(ctx, config);

    console.log('Done Training');
}

機械学習は、事前に完了させておきます
https://github.com/kuc-arc-f/tfjs_app1_express2/blob/master/train.js

TensorFlow.js + node/express , モデルの評価結果を出力

index:

概要:

前のTensorFlow.js 関係で、
学習済で保存モデルから、node.js で予測値を出力し。
グラフ表示する例となります

環境

TensorFlow.js
node.js
Vue.js
express
Ubuntu16

画面

前回の、回帰モデルの結果


f:id:knaka0209:20191013143938p:plain

参考のコード

github.com

npm install
npm start

実装など

機械学習は、事前に実行して。モデルを保存しておきます
https://github.com/kuc-arc-f/tfjs_app1_express1/blob/master/train.js

async function run_train() {
    const tr = new LibTrain( )
    const dTrain = new LibTrainData( )
    const appConst = new LibConst( )
//    console.log(appConst.model_name )
//return;
    const model = tr.createModel();  
    const data = await tr.getData();
    var chart_dats = dTrain.convert_chart_arr(data)
    console.log(chart_dats.lbl.length )
    const tensorData = tr.convertToTensor(data);
    const {inputs, labels} = tensorData;
    // Train the model  
    console.log('Training-start');
    await tr.trainModel(model, inputs, labels,
            tensorData, chart_dats.lbl.length
            ,chart_dats  );
    console.log('#fit-complete');    
       //pred
    const [xs, preds] = tr.testModel(model, data, tensorData, 
                    chart_dats.lbl.length);
console.log( preds );
    await model.save(appConst.model_name );

}

api : モデル読み込み。評価処理、
https://github.com/kuc-arc-f/tfjs_app1_express1/blob/master/routes/api_train.js

router.get('/chart_items', async function(req, res) {
    console.log('Hello TensorFlow, t3-read');
    const tr = new LibTrain( )
    const dTrain = new LibTrainData( )
    const appConst = new LibConst( )
    //
    const data = await tr.getData();
    var chart_dats = dTrain.convert_chart_arr(data)
    console.log(chart_dats.lbl.length )
    const tensorData = tr.convertToTensor(data);
    
    const model = await tf.loadLayersModel(appConst.model_name + '/model.json');
    //pred
    const [xs, preds] = tr.testModel(model, data, tensorData, 
    chart_dats.lbl.length);
//console.log( preds );    
    //out
    var items = []
    preds.forEach( function (item) {
        items.push(item  );
    });
    var arr ={
        'pred' : items,
        'chart_dats' : chart_dats,
    }
    var param = {"docs": arr };
    res.json(param);
});

まとめ

前回のブラウザ版と、比較して
事前に、学習処理が必要ですが
評価時に、学習しない分。かなり高速表示できました。