Items with relationships
Last updated
class Movie extends \Cherrycake\Item {
...
function getDirector() {
return new Director([
"loadMethod" => "fromId",
"id" => $this->directorId
]);
}
}$movies = new Movies([
"fillMethod" => "fromParameters",
"p" => [
"limit" => 5,
"order" => ["random"]
]
]);
foreach ($movies as $movie)
echo "{$movie->title} directed by {$movie->getDirector()->name}\n";Explorers directed by Joe Dante
E.T. the Extra-Terrestrial directed by Steven Spielberg
Tron directed by Steven Lisberger
Close Encounters of the Third Kind directed by Steven Spielberg
Arrival directed by Denis Villeneuveclass Movies extends \Cherrycake\Items {
protected $tableName = "movies";
protected $itemClassName = "\CherrycakeApp\Movie";
function fillFromParameters($p = false) {
// Treat parameters
self::treatParameters($p, [
"releasedWhenDirectorWasYoungerThan" => [
"default" => false
]
]);
// Modify $p accordingly
if ($p["releasedWhenDirectorWasYoungerThan"]) {
$p["tables"][] = "directors";
$p["wheres"][] = ["sqlPart" => "directors.id = movies.directorId"];
$p["wheres"][] = [
"sqlPart" => "movies.year - directors.birthYear <= ?",
"values" => [
[
"type" => \Cherrycake\DATABASE_FIELD_TYPE_INTEGER,
"value" => $p["releasedWhenDirectorWasYoungerThan"]
]
]
];
}
}
// Call the parent fillFromParameters
return parent::fillFromParameters($p);
}
}$movies = new Movies([
"fillMethod" => "fromParameters",
"p" => [
"releasedWhenDirectorWasYoungerThan" => 35
]
]);
foreach ($movies as $movie)
echo
"\"{$movie->title}\"".
" directed by ".
$movie->getDirector()->name.
" at age ".
($movie->year - $movie->getDirector()->birthYear).
"\n";"The Thing" directed by John Carpenter at age 34
"Silent Running" directed by Douglas Trumbull at age 30
"The Hitchhiker’s Guide to the Galaxy" directed by Garth Jennings at age 33
"Tron" directed by Steven Lisberger at age 31
"Close Encounters of the Third Kind" directed by Steven Spielberg at age 31
"The Abyss" directed by James Cameron at age 35