使用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) }
您能告诉我如何检索对象中的数据(品牌)。
答案 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();