как установить массив или ассоциативный массив в 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 ответ:
Я знаю, что это может быть немного поздно, но я действительно столкнулся с этой проблемой только сейчас.
В принципе, если вы уже создали 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. Это довольно грубо, просто показываю вам основную логику за этим. Я вообще ничего не проверял.