小编Mic*_*ael的帖子

在row_SQL中排除row_to_json()中的空值

我想将记录集的行转换为JSON,但不包括任何最终在JavaScript中未定义的空条目.例如,假设我有表testdata条目

id | prop1 (integer) | prop2 (text)
-------------------------------------
 1 |               42 | 'Answer'
 2 |             NULL | 'No prop one'
 3 |                0 | NULL
Run Code Online (Sandbox Code Playgroud)

然后执行

SELECT row_to_json(testdata) FROM testdata
Run Code Online (Sandbox Code Playgroud)

我得到的是:

{"id":"1","prop1":"42","prop2":"Answer"}
{"id":"2","prop1":null,"prop2":"No prop one"}
{"id":"3","prop1":"0","prop2":null}
Run Code Online (Sandbox Code Playgroud)

但相反,我想要的是:

{"id":"1","prop1":"42","prop2":"Answer"}
{"id":"2","prop2":"No prop one"}
{"id":"3","prop1":"0"}
Run Code Online (Sandbox Code Playgroud)

这可能吗?根据PostgreSQL 9.3 的JSON函数文档,只有一个额外的选项或参数row_to_json,但设置pretty_bool=true不会删除空值,所以似乎答案可能是否定的.但这似乎也是一个非常明显和有用的功能,所以我希望别人找到了我错过的东西.

我的最终目标是通过GET调用PHP页面来检索JavaScript中的记录.我是否最好从更标准的记录集中构建PHP中的JSON,而不是使用PostgreSQL的JSON例程?

postgresql json

11
推荐指数
2
解决办法
3336
查看次数

如何在Mathematica中获取列表的所有分区?

通过列表的分区,我的意思是一组列表元素,使得任何一对不同的子集的交集是空的,并且所有子集的并集是等于原始列表的子集.

例如,如果我的输入列表是,{1,?,x}那么我想要一个返回的函数

{ {{1},{?},{x}}, {{1,?},{x}}, {{1,x},{?}}, {{1},{x,?}}, {{1,?,x}} }
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica

8
推荐指数
1
解决办法
878
查看次数

返回CakePHP 3.0 belongsToMany关系中关联实体ID的JSON数组

如果我有两个表,比如说,foos并且bars在多对多关系中(通过bars_foos连接表,在这种情况下),CakePHP 3.0中包含与每个Foo关联的Bars的ID数组的最佳方式是什么? RequestHandler通过_serialize属性返回的JSON?

具体来说,我希望能够访问site/foos.json并看到这样的事情:

{
  "foos": [
    {
      "id": 1,
      "name": "A foo",
      ...
      "bar_ids": [1, 3, 5]
    },
    {
      "id": 2,
      "name": "Foo too",
      ...
      "bar_ids": [2]
  ]
}
Run Code Online (Sandbox Code Playgroud)

作为奖励,如果每个Foo也属于ToMany Bazzes,这应该仍然有用,所以我最终得到了,例如,

      ...
      "bar_ids": [1, 3, 5],
      "baz_ids": [37, 42]
      ...
Run Code Online (Sandbox Code Playgroud)

是否有一种直接的方法来实现这一点,很容易应用于许多模型,并不会导致过多的数据库查询?


到目前为止我尝试过的:

我已经设法以两种方式粗略地完成了这项工作,但是对于快速且容易地推广到许多模型而言似乎都不成熟.我担心添加新查询或查询字段以获取可能已经存在于CakePHP中的信息的效率,如果我只能找到正确的语法来实现它.

虚拟领域

一种方法是通过Foo实体中的_getBarIds()函数和设置创建虚拟字段protected $_virtual = ['bar_ids'].该函数使用TableRegistry查找和查询bars_foos与当前Foo关联的Bar实体的连接表,并将它们作为PHP数组返回.关键功能大致如下:

// In src/Model/Entity/Foo.php, protected function _getBarIds:
$bars_foos = TableRegistry::get('Bookmarks_Tags');
$these_bars = $bars_foos->find()
    ->select(['bar_id'])
    ->where(['foo_id' => $this->id]);
Run Code Online (Sandbox Code Playgroud)

这样做效果相当不错,但是 …

cakephp has-and-belongs-to-many cakephp-3.0

1
推荐指数
1
解决办法
1005
查看次数