Cake2でのモデルは $useTable = false;
をモデル内に定義すればテーブルなしモデルが利用できました。
Cake3以降でのモデルは基本的にDBテーブルがある前提なので、Cake2と同じやり方で定義するとエラーが起きてしまいます。
shortcode
public function initialize()
{
$useTable = false; // エラーになる
}
Cake2のDBテーブルなしのモデルをCake4へ移行させるための作成として、「ユーティリティとして定義する」方法が考えられます。
<?php namespace App\Utility; // Cake2に存在するメソッドをユーティリティとして移行 class HogeUtil { public static hoge() { } }
注意点としては、ユーティリティはstatic
として定義する必要があります。(お手軽に使い回し利用するのが本来の目的なので)
呼び出し側としては、$this->HogeUtil
となっている箇所を HogeUtil::hoge()
という形で呼び出せばよいですね(モデル移管の場合は、Cake2モデル内でCake4メソッドを呼び出す仕組みがある前提です)
また、生SQLを利用する場合のケースでも、基本的にはそのままユーティリティ内の移行でOKかと。
ですが、テーブルが存在していて、ORM使えるメリットとかメンテ考えるとケースバイケースです。従来通りモデルが利用できそうならそちらに寄せましょう。
Cake2側でビヘイビアを利用してる場合は?
Cake2内でビヘイビアを利用している場合、そのビヘイビアも含めてユーティリティ化を検討します。
※ビヘイビアはモデル上で利用できます。Cake2テーブル無しモデルでビヘイビアを利用している場合、Cake4でモデルをユーティリティ化した上でビヘイビアは利用できないため。