2015-09-22 56 views
1

不確定這是一個php還是cakephp問題。我正在使用cakephp ver3.1.3。我有一個CakePHP的查詢對象$query看起來像這樣當我打電話debug($query->toArray());從php對象中過濾掉一些元素

[ 
    (int) 0 => object(App\Model\Entity\Customer) { 

     'id' => (int) 1, 
     'username' => 'asd', 
     'password' => '123', 
     'fullname' => 'asd', 
     'email_addr' => '[email protected]', 
     '[new]' => false, 
     '[accessible]' => [ 
      '*' => true 
     ], 
     '[dirty]' => [], 
     '[original]' => [], 
     '[virtual]' => [], 
     '[errors]' => [], 
     '[repository]' => 'Customers' 

    } 
] 

當我打電話json_encode($query),它看起來像這樣;

[ 
    { 
     "id": 1, 
     "username": "asd", 
     "password": "123", 
     "fullname": "asd", 
     "email_addr": "[email protected]" 
    } 
] 

如何處理$查詢,這樣當我打電話json_encode($query),輸出會是這樣?

[ 
    { 
     "email_addr": "[email protected]" 
    } 
] 
+0

使用json_decode和json_encode函數。 – aldrin27

回答

2

如果只從數據庫接收場「EMAIL_ADDR」,使用方法select()修改查詢:如果你想刪除所有其他領域後的查詢已經跑了,你可以

$query->select(['email_addr']); 

在陣列上只是環和修改的元素:

$simplified = array(); 
foreach($query as $row) { 
    $simplified[] = array(
     'email_addr' => $row->get('email_addr') 
    ); 
} 
echo json_encode($simplified); 

在一個側面說明,一個重要的警示:不要,在任何情況下,存儲密碼s以明文形式顯示。閱讀this answer,特別是關於存儲密碼的部分!

+0

雖然你已經加載的@ LarsEbert的回答會爲實體工作的第二部分,有一個簡單的方法:使用'$ _hidden'財產(http://book.cakephp.org/3.0/en/orm/entities .html#hiding-properties)來設置哪些字段不應該被編碼。 例如,在你的客戶的實體類定義: '$保護_hidden = [ '身份證', '用戶名', '密碼', '全名'];' –