EDIT/CLARIFICATION:この質問は、変換をCakePHP 3.xにフックする場所を尋ねています。私はbinを16進数に変換する方法を知っています。問題は、CakePHP 3.xのモデル構造で、結果の行を傍受して変更する場所です。CakePHP 3で取得したフィールドを傍受するにはどうすればよいですか?
私は、MySQLテーブルにvarbinary(16)としてUUIDデータを格納しています。これは主キーではありません。このフィールドを読むと、PHPで標準の36文字の文字列(ハイフンが挿入されたバイナリから16進数への変換)に変換したいと考えています。 CakePHP 2.xでは、afterFind()コールバックを使用しました。 CakePHP 3.xのドキュメントにはuse Map/Reduceと書かれていますが、これはコード内のすべてのfind()を見つけることを意味します。おそらくCakePHP 3の動作として、私はモデルでこれを達成できるはずです。私は唯一のデータベースからの読み込みについて聞いてるのよ
create table `books` (
`id` int(10) unsigned not null auto_increment,
`my_uuid` varbinary(16) not null,
`created` timestamp not null default current_timestamp on update current_timestamp,
primary key (`id`),
) engine=InnoDB;
注:
テーブルは次のようになります。挿入と更新は正常に動作しています。私はバイナリから読み込み時に文字列に変換したいと思います。モデルレイヤ(テーブル/エンティティ)でこれを行う必要があると思います。
http://php.net/manual/en/function.bin2hex.php http://php.net/manual/en/function.substr.php – Sammitch
@Sammitchしたがって、質問にフレーズする方法はありますかそれはPHPでバイナリ文字列を行うことではないことを明確にしますか?これは、CakePHP 3で適切な場所を見つけることです。 –
カスタムデータベースタイプ(btw、なぜ** VAR ** BINARY?)、または結果フォーマッタを使用するか、後者はモデルbeforeFindイベントに適用できます。 ** https://stackoverflow.com/questions/32260229/encyption-decryption-of-form-fields-in-cakephp-3**/** https://github.com/cakephp/cakephp/blob/3.5。 8/src/Database/Type/BinaryType.php ** – ndm