いえ、全然大したことない投稿なんですけど・・。
phinxなどを使ってテーブルをあらかじめ作っておくと、そこからmodel層を作ることができます。
例えば
usersというテーブルがあると、こんな感じで作れます。
./bin/cake bake model users
これで、Entity、Table、Fixture、Testのファイルが作られます。
すでに同名のファイルがある場合は、上書きするかどうか選ぶことができます。
また、cakeの命名規則に沿ってmodelが作られるので、少し注意が必要です。
例えば、best_friend_idというカラム名を設定してbakeすると、best_friendsというテーブル名のidを外部キーとして入れるというmodelが作られます。
shellで使う
というか、cakeで作ったmodelを、他のツールから使いたいことがあって、調べたらcakeにshellという機能が備わっていたという話です。
使ったことがなかったので、知りませんでした・・。
基本的にはリファレンス見ればいいと思うんですけど、例えばShellクラスを継承して作ります。
namespace App\Shell;
use Cake\Console\Shell;
class HelloShell extends Shell
{
public function main()
{
$this->out('Hello world.');
}
}
継承したクラス名は、後ろにShellとつける必要があります。
下記を実行すると、main()を動かすことができます。
./bin/cake hello
modelを使う
前置きが長くなりましたが・・・shellでmodelを使う場合(shellに限りませんけど)、TableRegistryを用いてTableオブジェクトを作成します。
public function main()
{
$users = TableRegistry::get('users'); // テーブル名を指定
}
あとは、$usersからfind()を使ってデータを取得するなり、newEntity()を使って新しくEntityを作るなりしていけば大丈夫だと思います。
どうでもいいんですけど、Tableオブジェクトの名前でよくテーブル名が使われているんですけど(上記だと、users)、これだと複数のuserオブジェクトを配列に入れたい時の変数名に困ったりします。
正直、混乱するので、usersTableとかにするといいかもしれません(というか、たまにリファレンスでそういうところあります)。