如何在RedBeanPHP中从结果中排除表/子项
我已经建立了一个关系模型,如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还包含与汽车相关的每个用户 如何仅查询具有“真实”子项的汽车?指定
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);
}
}
}
}