PHP Parse.com使用指向另一个表的指针从列中检索数据

时间:2016-04-25 21:07:46

标签: php parse-platform

使用parse.com php sdk。

从位于名为Product的表中的列中的指针检索数据时遇到问题,该表具有多列。 (城市,标签,国家,品牌....)

'brand'是一个列,指向表'Brands'中的数据。

在我的PHP代码中,我设置了一个名为“Brand”的类,它扩展了ParseObject。

class Brand extends ParseObject  {

public static $parseClassName = 'Brands';

function __construct(){
    parent::__construct($parseClassName);
}
public function getIdBrand(){
    return $this->getObjectId();
}

public function getName(){
    return $this->get('name');
}

public function setName($name){
    return $this->set('name',$name);
}

public function getDescription(){
    return $this->get('description');
}

public function setDescription($description){
    return $this->set('description',$description);
}

public function save(){
    if(!getName() && !getDescription()){
        echo 'Brand can\'t be saved';
    }else{
        parent::save();
    }
}

function showBrand() {
    echo 'Brand[' . getIdBrand() . ', ' . getName() . ', ' . getDescription()  . ']';
}

}

我的类Product扩展了ParseObject。

class Product extends ParseObject {

public static $parseClassName = 'Product';

function __construct() {
    parent::__construct ( $parseClassName );
}
public function getIdProduct() {
    return $this->getObjectId ();
}

// --------------
// other getter & setters
// --------------


/**
 * 
 * @return Brand
 */
public function getBrand() {
    return $this->get( 'brand' );
}

public function setBrand($brand) {
    return $this->set ( 'brand', $brand );
}


// --------------
// other getter & setters
// --------------

然后我有一个php文件,在其中我获取所有产品,同时指定他们所属的用户。

$currentUser = ParseUser::getCurrentUser();
$query = new ParseQuery(Product::$parseClassName);
$query->equalTo("user", $currentUser);
$results = $query->find();

然后我继续获取每个产品的数据。

for ($i = 0; $i < count($results); $i++) {
$product = $results[$i];
$brand = $results[$i]->get('brand');
echo 'brand name = '.$brand->getName().',';
.........}

我的问题是我无法获得品牌名称。 它只向我发送一个空值。

在做==&gt;时var_dump($results[$i]->get('brand')); 我得到以下结果

object(Brand)#6 (9) { ["serverData":protected]=> array(0) { }
["operationSet":protected]=> array(0) { }
["estimatedData":"Parse\ParseObject":private]=> array(0) { } 
["dataAvailability":"Parse\ParseObject":private]=> array(0) { }
["className":"Parse\ParseObject":private]=> string(6) "Brands"
["objectId":"Parse\ParseObject":private]=> NULL
["createdAt":"Parse\ParseObject":private]=> NULL
["updatedAt":"Parse\ParseObject":private]=> NULL
["hasBeenFetched":"Parse\ParseObject":private]=> bool(true) }

您能告诉我如何检索对象中的数据(品牌)。

2 个答案:

答案 0 :(得分:0)

我设法找到了问题的答案。

在我的php项目中,我去了ParseObject.php的文件夹,我更新了函数

mergeFromServer($data, $completeData = true)

我在foreach的开头添加了这段代码:

            // If we have a column in our table that has a pointer to data in another table
            // The data in our column will be considered as an array.
            // In that array there is the objectId,
            // We then transform that array to a string containing the objectId
            // We will later on do a query to get the data associated to our column 
            if(is_array($value)){
                if(!is_null($value['objectId'])){
                    $value = $value['objectId'];
                }
            }

答案 1 :(得分:0)

经过几个小时的研究后,我发现有一种更容易的方法来获取指针列中的数据。

我必须在查询中添加'includeKey'。

$currentUser = ParseUser::getCurrentUser();
$query = new ParseQuery(Product::$parseClassName);
$query->includeKey("brand");
$query->equalTo("user", $currentUser);
$results = $query->find();