как установить массив или ассоциативный массив в ParseObject с помощью parse php sdk?


Я разрабатываю веб-приложение, в котором я использую ядро php и Parse.com как база данных. Я сослался https://www.parse.com/docs/php_guide#objects-saving . для задания единственного значения используется key set () и указывается, что " Массивы и ассоциативные массивы требуют отдельных методов для установки их на ParseObject. "

<?php
require 'vendor/autoload.php';
	   
use ParseParseClient;
 
ParseClient::initialize('APP ID','REST API ID', 'MASTER ID');


use ParseParseObject;
use ParseParseQuery;
use ParseParseUser;
use ParseParseInstallation;

class ParseScripts
{
    public $object;
    public $table;
    
    
    public function __construct($parse_class=null) 
    {
        $this->object=new ParseObject($parse_class);
        $this->table=$parse_class;
    }
    
    public function setTable($table)
    {
        $o=new ParseScripts($table);
        return $o;
    }
    
    public function insert($data=  array())
    {
        
        echo "<br>data<pre><br>";
                print_r($data);
//                $k=array_keys($data);
 //               print_r($k[0]);
                
        $this->object=new ParseObject($this->table);
   //     $this->object->setAssociativeArray("$k[0]", $data);
        
        
        foreach ($data as $key => $value) 
        {
            $this->object->setAssociativeArray("$key", $value);
          //  echo "key<br>".$key; echo "<br><br>value<br>";print_r($value);
        }
      
        try 
        {
            $this->object->save();
            echo "object inserted successfully";
        } catch (ParseException $exc) 
        {
            echo $exc->getTraceAsString();
        }
           
           
    }
        
}

$ob=new ParseScripts("qt_topic");
$ob->setTable("qt_topic");
$info=  array('topic_name'=>array('Yii 6','Yii 7'));

$ob->insert($info);
?>
 

В приведенном выше примере, если я использовал setArray () внутри foreach, он выдает ошибку, что " ключ должен быть строкой, заданной массивом use set ()", и если Я использовал метод set, то он дает ошибку "использование setArray или частично-ассоциативный массив для задания массива. Будет лучше вставить массив в качестве значения, а не вызывать inset () больше раз для каждого значения. пожалуйста, помогите мне решить эту проблему.

1 2

1 ответ:

Я знаю, что это может быть немного поздно, но я действительно столкнулся с этой проблемой только сейчас.

В принципе, если вы уже создали ParseObject из предыдущих сохранений, он вернет TypeError, так как тип уже установлен на конце синтаксического анализа.

Если это вообще возможно, вы должны просто удалить объект Parse с основной страницы Parse. Если вы не можете этого сделать, я бы предложил удалить столбец и создать новый, зациклившись на столбце и обернув текущие значения как массивы.

Смотритездесь для базового примера из форумов синтаксического анализа.

// Create an array to store the old values in.
$old_values_array = [];

$query = new ParseQuery("GameScore");
$query->exists("SomeColumnYouKnowIsAlwaysSet");
$results = $query->find();

// Store the values in the array by looping over them


for ($i = 0; $i < count($results); $i++) { 
    $object = $results[$i];
    array_push($old_values_array,$object->get('TheColumnYouWantToChange'));
}

Теперь замкните цикл над $old_values array и снова вставьте его с обновлением

// Create the object.
for ($i = 0; $i < count($results); $i++) { 
    $object = $results[$i];
    $object->setArray('someNewColumnName', [$old_values_array[i]]);

    // Save It
    $object->save();
}

Надеюсь, это поможет!

P.S. Это довольно грубо, просто показываю вам основную логику за этим. Я вообще ничего не проверял.