Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在RedBeanPHP中从结果中排除表/子项_Php_Sql_Redbean - Fatal编程技术网

如何在RedBeanPHP中从结果中排除表/子项

如何在RedBeanPHP中从结果中排除表/子项,php,sql,redbean,Php,Sql,Redbean,我已经建立了一个关系模型,如RedBeanPHP: Car id color ownPart Part id name 因此,RedBean按预期创建SQL表: Car id color Part id name car_id 这很有效 但是,我的数据库中还有其他表,例如User,它也有一个car\u id标识用户的车 当我想通过以下方式查询所有Cars及其子项(Parts)时 JSON还包含与汽车相关的每个用户 如何仅查询具有“真实”子项的汽车?指定

我已经建立了一个关系模型,如RedBeanPHP:

Car
id    color    ownPart

Part
id    name
因此,RedBean按预期创建SQL表:

Car
id    color

Part
id    name    car_id
这很有效

但是,我的数据库中还有其他表,例如
User
,它也有一个
car\u id
标识用户的车

当我想通过以下方式查询所有
Car
s及其子项(
Part
s)时

JSON还包含与汽车相关的每个
用户

如何仅查询具有“真实”子项的汽车?

指定第三个参数
$filter
,您可以使用该参数指定还导出哪些关系:

$foo = R::exportAll($cars, false, array('part'));
如果您有问题,请阅读Jacobs的答案()(参见他答案下方的我的评论)

我有多维数组要过滤,所以经过几个小时的尝试,我终于找到了一个解决办法,不再过滤我想要的,而是删除我不想要的:

$cars = R::find('car');
$foo = R::exportAll( $cars );

$keystoremove = array("ownPart", "ownBrokenpart");
delFromArray($foo, $keystoremove );

echo json_encode($foo);


function delFromArray(&$array, $keys) { 
  foreach ($array as $key => &$value) { 
      if (in_array($key, $keys, true)){
        unset($array[$key]);
      }
      else {
        if (is_array($value)) { 
            delFromArray($value, $keys); 
        }
      }

  }
}

谢谢这太棒了!下面的一个问题是:如何将其用于嵌套数组?例如,我的
零件
s有
srew
s(=>a
螺钉
零件id
),数据库中也有
断头零件
也有
零件id
。但我只想在JSON中显示部分
screw
s.@A2i\u您需要在RedBean之外执行此操作。我不相信它支持更复杂的过滤。
$cars = R::find('car');
$foo = R::exportAll( $cars );

$keystoremove = array("ownPart", "ownBrokenpart");
delFromArray($foo, $keystoremove );

echo json_encode($foo);


function delFromArray(&$array, $keys) { 
  foreach ($array as $key => &$value) { 
      if (in_array($key, $keys, true)){
        unset($array[$key]);
      }
      else {
        if (is_array($value)) { 
            delFromArray($value, $keys); 
        }
      }

  }
}