プログラミング

[Scala] Joda DateTimeをBSON ISODate形でMongoDBに登録したい

Joda DateTimeって最近はもうトレンドじゃない?
とにもかくにも、今現在進行形で使っていてMongoDBにISODateとして保存したい。
けど流石に公式サポートされてる型じゃないんでCan't find a codec for class org.joda.time.DateTime.って怒られちゃいます。(下記コード)
わざわざ文字列にするのもあれだし、ということでスマートにコーデックを作る方法です。

import org.mongodb.scala._
import org.mongodb.scala.bson.codecs.Macros._
import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY
import org.bson.codecs.configuration.CodecRegistries.{fromRegistries, fromProviders}
import scala.concurrent.duration._
import org.joda.time.{DateTime, DateTimeZone}
import org.joda.time.format.DateTimeFormat

case class Post(title: String, body: String, createAt: DateTime)

val tz = DateTimeZone.forID("Asia/Tokyo")
val format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").withZone(tz)

val codecRegistry = fromRegistries(fromProviders(classOf[Post]), DEFAULT_CODEC_REGISTRY)
val uri = "mongodb://root:password@localhost:27017/?authSource=admin"
val db = MongoClient(uri).getDatabase("example_db")
val posts: MongoCollection[Post] = db.withCodecRegistry(codecRegistry).getCollection("posts")

val post = Post("記事のタイトル", "本文だよ!", format.parseDateTime("2020-10-01 10:00:00"))

// 【ここでエラー!】 org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class org.joda.time.DateTime.
Await.result(posts.insertOne(post).toFuture, 1 second)

続きを読む

[CakePHP] 実行前の生SQL文を取得する

プレースホルダを使ったSQLは実行後のクエリログを参照すれば実際に流したSQLの全文が取得できますが、実行前はそうもいきません。
さて、こういう時どうするかと考えた結果です。
CakePHP3.5 & MySQLで確認。
続きを読む

[CakePHP] JSONレスポンスで日本語をエンコードをさせない

PHPのjson_encode()関数はデフォルトでマルチバイトUnicode文字を\uXXXXにエンコードします。
PHP: json_encode - Manual

$values = [
  'message' => 'わけがわからないよ',
];

echo json_encode($values); // {"message":"\u308f\u3051\u304c\u308f\u304b\u3089\u306a\u3044\u3088"}

これによって読みづらくなる上に、データ量が増加してしまうばかりでメリットは薄いです。
CakePHPでJsonViewを使う場合にどうやって設定するかのメモ。
CakePHP3.5で確認。
続きを読む

[JavaScript] jQueryでrowspanな行を置換したい時は?

rowspanされてて2行で一組なテーブルってよくあるじゃないですか。
それを動的にまるっと挿し替えたいときどうするか。

<table>
    <tbody>
        <tr data-row-id="1">
            <td rowspan="2">2行分使ってるセル</td>
            <td>ほげほげ</td>
        </tr>
        <tr data-row-id="1">
            <td>ふがふが</td>
        </tr>
        <tr data-row-id="2">
        ...
    </tbody>
</table>

続きを読む