Jak u každého autora vypsaly jen knihy, které napsal a mají tag PHP?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- buffus
- Člen | 101
Ahoj, prosím o radu.
NDBT v2.3.6, MySQL DB podle schema
Modelová metoda withBookTag($tag) vybere všechny autory, kteří napsali knihu se štítkem „PHP“ ($tag = ‚PHP‘).
V presenteru v renderDefault()
- vnější foreach vypíše všechny autory, kteří napsali knihu se štítkem „PHP“
- a vnitřní foreach ke každému autorovi všechny knihy, které napsal.
Potřeboval bych, aby se mi u každého autora vypsaly jen knihy s tagem PHP?
<?php
namespace App\Model;
use Nette;
class AuthorManager extends Nette\Object
{
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function withBookTag($tag)
{
return $this->database->table('author')
->where(':book:book_tag.tag.name', $tag)
->group('author.id')
->having('COUNT(:book:book_tag.tag.id) > 0');
}
}
?>
<?php
namespace App\Presenters;
use Nette;
use App\Model;
class HomepagePresenter extends BasePresenter
{
private $author;
public function __construct(Model\AuthorManager $author)
{
$this->author = $author;
}
public function renderDefault()
{
$tag = 'PHP';
$authors = $this->author->withBookTag($tag);
foreach ($authors as $author) {
echo $author->name . " napsal: ";
foreach ($author->related('book') as $book) {
echo $book->title . ", ";
}
echo "<br>";
}
}
}
?>