Nette\Object napsání metody __toString

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Cars Tomas
Člen | 43
+
0
-

Ahoj,
mám objekt, který je potomkem Nette\Object. Dodělal jsem si k němu metodu __toString, abych mohl s jeho string reprezentací pracovat v databázi. Problém mi navstal, když jsem to takto použil:

<?php

/** @var Nette\Database\Context */
	protected $db;

//////////

// $phone je typu MyPhone

$row = $this->getAll()->where("phone LIKE", $phone);
// vygenerovany dotaz: "SELECT `id` FROM `partners` WHERE (`phone` LIKE +420 251002111)" ==> SPATNE


$row = $this->getAll()->where("phone LIKE", (string)$phone);
// vygenerovany dotaz: "SELECT `id` FROM `partners` WHERE (`phone` LIKE '+420 251002111')" ==> DOBRE

/////////
?>

Poradím mi prosím někdo jak ten __toString napsat aby nebyla potřeba toho natypování (string), nebo se bez toho prostě nedá obejít?

Děkuji

Editoval Cars Tomas (7. 1. 2015 17:30)

Filip Procházka
Moderator | 4668
+
0
-

To že to správně neobalí do stringu je samozřejmě bug.

Cars Tomas
Člen | 43
+
0
-

Aha. Mě právě zmátlo to, že když použiju takto proměnnou typu DateTime tak to bylo zaobalené v pořádku, myslel jsem teda že dělám chybu já.
Každopádně dík.

Filip Procházka
Moderator | 4668
+
+1
-

Na datetime je tam imho speciální podmínka, která i formátuje datum a čas do správného formátu pro databázi, proto to s tím funguje dobře :)