过滤掉一些远离php对象的元素

时间:2015-09-22 09:23:18

标签: php json cakephp cakephp-3.0

不确定这是php还是cakephp问题。我正在使用cakephp ver3.1.3。我有一个cakephp查询对象$query在我调用debug($query->toArray());

时看起来像这样
[
    (int) 0 => object(App\Model\Entity\Customer) {

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

    }
]

当我致电json_encode($query)时,它看起来像这样;

[
    {
        "id": 1,
        "username": "asd",
        "password": "123",
        "fullname": "asd",
        "email_addr": "asd@gmail.com"
    }
]

如何处理$ query,以便在调用json_encode($query)时,输出看起来像这样?

[
    {
        "email_addr": "asd@gmail.com"
    }
]

1 个答案:

答案 0 :(得分: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);

另一方面,一个重要警告:在任何情况下都不要以明文形式存储密码。请阅读this answer,特别是有关存储密码的部分!