それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

laravel のmodel を 外部から使う

laravel の Eloquent のモデルを別のプロジェクトからぱぱっと使う。

Consoleとかあるし、API作れば実現はできる。でも既存のものと組み合わせるときは、DBを直接書き換えたほうが早い時がある。

本当はプロジェクトの外部から直接触るのは良くないと思うし、プロジェクト側にAPIを作ったり、メンテナンス用のコマンドをプロジェクト内部につくったり、メンテナンス用のデータ復旧をMigration や Fixtgure / UnitTestと同様に作るべきなんだろうけど。

<?php
  /// laravel の Eloquent を外部から使う設定

// 必要なものをロード
  require_once __DIR__.'/vendor/autoload.php';
// DB の接続情報をいれる
  $capsule = new Illuminate\Database\Capsule\Manager();
  $capsule->addConnection([
                            "driver"   => "sqlite",
                            "database" => __DIR__."/database/database.sqlite",
                          ]);
  $capsule->setAsGlobal();
  $capsule->bootEloquent();

  ///
  /// AccessLogs モデルを保存してみる。
  require_once __DIR__.'/app/Model/AccessLogs.php';
  $al = new  App\Model\AccessLogs();
  $al->body = "Hello from  External World ";
  $al->save();

名前空間の解決

<?php
// 必要なものをロード
  require_once __DIR__.'/vendor/autoload.php';

今回は、$PROJECT_HOME/sample.php においたのでこのように書いている。

ただしくは、次のautoloadをlaravel で使っているのでこれを使う。(詳しくは laravel/public/index.php を見ればわかる。

<?php
$PROJECT_PATH/vendor/autoload.php

DB の解決

必要なロードが出来たので、DBを使うための初期設定をする。

ここでの目標は bootEloquent(); を実行することです。

<?php

// DB の接続情報をいれる
  $capsule = new Illuminate\Database\Capsule\Manager();
  $capsule->addConnection([
                            "driver"   => "sqlite",
                            "database" => __DIR__."/database/database.sqlite",
                          ]);
  $capsule->setAsGlobal();
  $capsule->bootEloquent();

最後にモデルをロードして利用する。

laravel で作っている model を 明示的にロードして、new して save する。

<?php
  /// AccessLogs モデルを保存してみる。
  require_once __DIR__.'/app/Model/AccessLogs.php';
  $al = new  App\Model\AccessLogs();
  $al->body = "Hello from  External World ";
  $al->save();

これですべて解決する。