gpt4 book ai didi

php - 选择一列 Doctrine DQL

转载 作者:可可西里 更新时间:2023-10-31 22:18:53 27 4
gpt4 key购买 nike

我需要一个简单的表格列。

以表“project”为例,包含列 idnameyear

如果我这样做:

$q = Doctrine_Query::create()
->select('a.pro_id')
->from('fndr_proyecto a')
->where('a.pro_id =?',1);
$pro = $q->execute();
json_encode($pro->toArray());

答案全是列样

{"id":1,"name":"Project name","year":2013}

但我只需要一栏。我希望:

{"id":1}

它适用于 DQL,因为原生 SQL 可以正常工作。

ORM 是使用 Visual Paradigm 自动构建的。

最佳答案

这是因为 Doctrine 将响应与所有对象信息混合在一起,因此所有列都是如此。

您需要使用不同的水化方法,there are many one ,但让我们关注其中的 5 个:

  • HYDRATE_RECORD,默认的
  • HYDRATE_ARRAY
  • HYDRATE_NONE
  • HYDRATE_SCALAR
  • HYDRATE_ARRAY_SHALLOW

您需要HYDRATE_ARRAY_SHALLOW 水化方法。原因如下。

  1. HYDRATE_RECORD

    $q = Doctrine_Query::create()
    ->select('a.pro_id')
    ->from('fndr_proyecto a')
    ->where('a.pro_id = ?',1);
    $pro = $q->execute(array(), Doctrine_Core::HYDRATE_RECORD);
    var_dump(json_encode($pro->toArray()));

    这将使用对象组合结果,并且组合关系(如果您在查询中使用 leftJoin)。由于它返回对象,我们需要调用 toArray() 才能发送适当的 json:

    [{"id":1,"name":"Project name","year":2013}]"
  2. HYDRATE_ARRAY

    $q = Doctrine_Query::create()
    ->select('a.pro_id')
    ->from('fndr_proyecto a')
    ->where('a.pro_id = ?',1);
    $pro = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
    var_dump(json_encode($pro));

    这会将结果合并为一个数组并自动添加主键:

    [{"id":"1","pro_id":"1"}]"
  3. HYDRATE_NONE

    $q = Doctrine_Query::create()
    ->select('a.pro_id')
    ->from('fndr_proyecto a')
    ->where('a.pro_id = ?',1);
    $pro = $q->execute(array(), Doctrine_Core::HYDRATE_NONE);
    var_dump(json_encode($pro));

    这不会合并结果,并且只返回值:

    [["1"]]"
  4. HYDRATE_SCALAR

    $q = Doctrine_Query::create()
    ->select('a.pro_id')
    ->from('fndr_proyecto a')
    ->where('a.pro_id = ?',1);
    $pro = $q->execute(array(), Doctrine_Core::HYDRATE_SCALAR);
    var_dump(json_encode($pro));

    这将合并来自 select 的结果,但将键索引作为具有表别名的列名:

    [{"a_pro_id":"1"}]"
  5. HYDRATE_ARRAY_SHALLOW

    $q = Doctrine_Query::create()
    ->select('a.pro_id')
    ->from('fndr_proyecto a')
    ->where('a.pro_id = ?',1);
    $pro = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY_SHALLOW);
    var_dump(json_encode($pro));

    这将合并来自 select 的结果,但使用键索引作为不带表别名的列名:

    "[{"pro_id":"1"}]"

关于php - 选择一列 Doctrine DQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14411229/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com