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
+
0
-

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>";
		}

	}

}

?>
David Matějka
Moderator | 6445
+
+3
-

->related('book')->where(':book_tag.tag.name', $tag)

buffus
Člen | 101
+
0
-

Děkuji.