2017-12-19 3 views
-2

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; 

注:

テーブルは次のようになります。挿入と更新は正常に動作しています。私はバイナリから読み込み時に文字列に変換したいと思います。モデルレイヤ(テーブル/エンティティ)でこれを行う必要があると思います。

+0

http://php.net/manual/en/function.bin2hex.php http://php.net/manual/en/function.substr.php – Sammitch

+0

@Sammitchしたがって、質問にフレーズする方法はありますかそれはPHPでバイナリ文字列を行うことではないことを明確にしますか?これは、CakePHP 3で適切な場所を見つけることです。 –

+1

カスタムデータベースタイプ(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

答えて

0

状況を解決するカスタムデータベースタイプ。 Custom data typesの例に従ってください。ソリューションに感謝@ndm。

関連する問題