(我想我最近已經寫 code 寫到不知道在幹嘛了...)
在使用 Laravel 的時候,從 DB (Mysql) 拿資料出來時,你可以透過 PDO Fetch style 去改變拿出來時的型態(取 ASSOC 或是 CLASS),這時候只要改變 database 的 config 就可以了(參考),又或者你只有某一部份的 sql 需要改變 PDO Fetch style,那你也可以單獨寫設定在程式裡,記得在結束後把設定改回來:
另外一個情境是,我的資料是先預先存在 Redis 裡面,如果 Redis 取不到資料,就會跟 Mysql 要,拿到資料後再 json_encode 塞到 Redis,但是這兩者取出的資料格式會變成 stdClass v.s Array,麻煩的是我希望 Redis 取出的格式是跟著 Mysql 的,所以是 Reids 的 stdClass 要轉為 Array()。
要讓 redis 取出的格式跟 mysql 一樣都是 array 的話,
在 json_decode 時要記得加第二個參數 true 就可以讓他以 Array 的方式回傳了:
end.
在使用 Laravel 的時候,從 DB (Mysql) 拿資料出來時,你可以透過 PDO Fetch style 去改變拿出來時的型態(取 ASSOC 或是 CLASS),這時候只要改變 database 的 config 就可以了(參考),又或者你只有某一部份的 sql 需要改變 PDO Fetch style,那你也可以單獨寫設定在程式裡,記得在結束後把設定改回來:
// 參考自 http://stackoverflow.com/questions/26174267/convert-laravel-object-to-array
// 改變 PDO 的 style
DB::setFetchMode(PDO::FETCH_ASSOC);
// array of arrays instead of objects
DB::table(..)->get();
// 改回原本的 PDO style
DB::setFetchMode(PDO::FETCH_CLASS);
// 改變 PDO 的 style
DB::setFetchMode(PDO::FETCH_ASSOC);
// array of arrays instead of objects
DB::table(..)->get();
// 改回原本的 PDO style
DB::setFetchMode(PDO::FETCH_CLASS);
另外一個情境是,我的資料是先預先存在 Redis 裡面,如果 Redis 取不到資料,就會跟 Mysql 要,拿到資料後再 json_encode 塞到 Redis,但是這兩者取出的資料格式會變成 stdClass v.s Array,麻煩的是我希望 Redis 取出的格式是跟著 Mysql 的,所以是 Reids 的 stdClass 要轉為 Array()。
要讓 redis 取出的格式跟 mysql 一樣都是 array 的話,
在 json_decode 時要記得加第二個參數 true 就可以讓他以 Array 的方式回傳了:
json_decode($redis->get('key'), true);
老實說要不是因為發現 redis 取出之後型態不同,我還真的沒發現 json_decode 的第二個參事就是 assoc 的意思,只是預設是 false :P。原來一個簡單的參數就可以解決我的問題,差點還以為要上網找一些奇怪的 method 來轉換 :P 感謝天end.
array 要改 stdClass object 只需要 return (object)$your_arry_data;
回覆刪除json_decode($redis->get('key', true));
回覆刪除應該改為
json_decode($redis->get('key'), true);
XD
啊 Orz 感謝 !!
刪除我都直接用程式轉,用is_object判斷,然後轉array
回覆刪除is_object 還不錯,謝謝提醒 :)
刪除