mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-04-01 22:02:23 +02:00
The modified ODS tests return atomic modifiers through bsonSerialize(), which conflicts with __pclass injection (the resulting newObj is neither an update nor a replacement document). Rather than delete these tests, we'll mark them as expecting failure until we allow such functionality in another interface down the line.
95 lines
2.1 KiB
PHP
95 lines
2.1 KiB
PHP
--TEST--
|
|
MongoDB\Driver\Command construction should always encode __pclass for Persistable objects
|
|
--SKIPIF--
|
|
<?php require __DIR__ . "/../utils/basic-skipif.inc"; CLEANUP(STANDALONE); ?>
|
|
--FILE--
|
|
<?php
|
|
require_once __DIR__ . "/../utils/basic.inc";
|
|
|
|
use MongoDB\BSON as BSON;
|
|
|
|
class MyClass implements BSON\Persistable
|
|
{
|
|
private $id;
|
|
private $child;
|
|
|
|
public function __construct($id, MyClass $child = null)
|
|
{
|
|
$this->id = $id;
|
|
$this->child = $child;
|
|
}
|
|
|
|
public function bsonSerialize()
|
|
{
|
|
return [
|
|
'_id' => $this->id,
|
|
'child' => $this->child,
|
|
];
|
|
}
|
|
|
|
public function bsonUnserialize(array $data)
|
|
{
|
|
$this->id = $data['_id'];
|
|
$this->child = $data['child'];
|
|
}
|
|
}
|
|
|
|
$manager = new MongoDB\Driver\Manager(STANDALONE);
|
|
|
|
$document = new MyClass('foo', new MyClass('bar', new MyClass('baz')));
|
|
|
|
$cursor = $manager->executeCommand(DATABASE_NAME, new MongoDB\Driver\Command([
|
|
'findAndModify' => COLLECTION_NAME,
|
|
'query' => ['_id' => 'foo'],
|
|
'update' => $document,
|
|
'upsert' => true,
|
|
'new' => true,
|
|
]));
|
|
var_dump($cursor->toArray()[0]->value);
|
|
|
|
$cursor = $manager->executeCommand(DATABASE_NAME, new MongoDB\Driver\Command([
|
|
'aggregate' => COLLECTION_NAME,
|
|
'pipeline' => [
|
|
['$match' => $document],
|
|
],
|
|
]));
|
|
var_dump($cursor->toArray()[0]->result[0]);
|
|
|
|
?>
|
|
===DONE===
|
|
<?php exit(0); ?>
|
|
--EXPECTF--
|
|
object(MyClass)#%d (%d) {
|
|
["id":"MyClass":private]=>
|
|
string(3) "foo"
|
|
["child":"MyClass":private]=>
|
|
object(MyClass)#%d (%d) {
|
|
["id":"MyClass":private]=>
|
|
string(3) "bar"
|
|
["child":"MyClass":private]=>
|
|
object(MyClass)#%d (%d) {
|
|
["id":"MyClass":private]=>
|
|
string(3) "baz"
|
|
["child":"MyClass":private]=>
|
|
NULL
|
|
}
|
|
}
|
|
}
|
|
object(MyClass)#%d (%d) {
|
|
["id":"MyClass":private]=>
|
|
string(3) "foo"
|
|
["child":"MyClass":private]=>
|
|
object(MyClass)#%d (%d) {
|
|
["id":"MyClass":private]=>
|
|
string(3) "bar"
|
|
["child":"MyClass":private]=>
|
|
object(MyClass)#%d (%d) {
|
|
["id":"MyClass":private]=>
|
|
string(3) "baz"
|
|
["child":"MyClass":private]=>
|
|
NULL
|
|
}
|
|
}
|
|
}
|
|
===DONE===
|