Cakephp WEB開発

[Cakephp2→4]モデル編: Cake2テーブルなしモデルは、Cake4でいかに扱うか

※本サイトはPR表記を含みます。

 

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

-Cakephp, WEB開発
-