最近在用Yii2 + mongodb做個(gè)小項(xiàng)目,該筆記用于記錄使用過程中的不便之處,將來擴(kuò)展之。
- 插入數(shù)據(jù)指定_id:ActiveRecord::insertInternal方法中,會將數(shù)據(jù)庫返回結(jié)果中的_id值覆蓋當(dāng)前AR的attributes中的_id,當(dāng)插入數(shù)據(jù)指定了_id時(shí),會被NULL值覆蓋掉。
- 搜索_id為非ObjectId且包含大寫字母的記錄:底層調(diào)用ensureMongoId時(shí),new ObjectId($id),會更改$id值轉(zhuǎn)為小寫字符,導(dǎo)致搜索結(jié)果為空。
- 對數(shù)據(jù)結(jié)構(gòu)含層級的情況支持程度不夠,比如下面的結(jié)構(gòu),如果希望將Location實(shí)例化為對象,沒有現(xiàn)成的基類可用,而且hasOne, hasMany也無法支持$this->hasOne(City::className(), ['_id' => 'location.province_id'])這種情況。
{
"_id": "sp_57c106ce1244e70",
"name": "空間名稱"
"location" : {
"coordinate" : [
116.403875,
39.915168
],
"province_id" : 110000,
"city_id" : 110100,
"district_id" : 110101,
"street" : "望京宏泰東街",
"building" : "綠地中心B座"
}
}
- 打算做個(gè)ConstActiveRecord,數(shù)據(jù)源從文件讀取,但需要擁有AR各項(xiàng)特性。