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();
これですべて解決する。