
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でモデルをユーティリティ化した上でビヘイビアは利用できないため。