Ako spojiť tabuľky v DB a následne ich vypísať v Šablóne

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

Zdravím…
Potrebujem popostrčiť,poradiť s mojím problémom
Mám dve tabuľky
mesiace (januar, február atď…)
dátum (01.01.2016, 01.02.2016 atď…)
Neviem ako spojiť tieto dve tabuľky tak aby som pri výbere selectom v Latte vypísal kalendár dní vybraného mesiaca čiže
Vyberiem mesiac Marec vypíše sa kalandár 01.03.2016 atď…
Absolútne ma nenapadne ako to riešiť.
Ako povedať že ak má januaŕ 31 dní tak vypíš 31 sem

<div role="tabpanel" class="tab-pane" id="">
....
</div>

Potom ukonči a začni novím ale len 29 dní lebo Február 2016 má len 29 dní atď…

<div role="tabpanel" class="tab-pane" id="">
....
</div>

Sorry za tak rozsiahle rozpísanie a sorry ak som to rozpísal možno nepochopujúco
Vopred Všetkým ďakujem.

================================================================================================

Momentálne to riešim takto!

CREATE TABLE `months` (
  `id` int(11) NOT NULL,
  `month` varchar(32) COLLATE utf8_bin NOT NULL,
  `month_link` varchar(32) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `date` (
  `id` int(11) NOT NULL,
  `date` varchar(10) COLLATE utf8_bin NOT NULL,
  `tab_id` varchar(32) COLLATE utf8_bin NOT NULL,
  `li_status` varchar(10) COLLATE utf8_bin NOT NULL,
  `span_status` varchar(32) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

KalendarPresenter

<?php
namespace App\Presenters;
use App\Repository\MonthsRepository;
use App\Repository\DateRepository;

class KalendarPresenter extends CommandPresenter {
	/** @var MonthsRepository */
	public $monthsRepository;
	/** @var DateRepository */
	public $dateRepository;

	public function __construct(MonthsRepository $monthsRepository, DateRepository $dateRepository) {
		$this->monthsRepository = $monthsRepository;
		$this->dateRepository = $dateRepository;
	}

	public function beforeRender() {
		$selectMonths = $this->monthsRepository->findAll()
											   ->where('id');
		$this->template->Months = $selectMonths;
		$selectDate = $this->dateRepository->findAll()
											   ->where('id');
		$this->template->Date = $selectDate;

	}
}

A Latte Šablónu

<div class="col-md-7 col-sm-12 col-xs-12">
							<label for="months" class="control-label">
								Výber mesiaca
							</label>
                            <select id="months" class="chosen-select noRadius">
								{foreach $Months as $month}
								<option role="presentation tab" value="{$month->month_link}" href="#{$month->month_link}" aria-controls="{$month->month_link}" data-toggle="tab">
									{$month->month}
								</option>
								{/foreach}
							</select>

							<div class="tab-content">

								<div role="tabpanel" class="tab-pane" id="">
									<ul class="list-inline calendar-date">
									{foreach $Date as $date}
										{if $date->li_status === 'free'}
										<li class="{$date->li_status} date_return">
											<a href="javascript:;" data-date="{$date->date}">
												{$date->date}
												<span>{$date->span_status}</span>
											</a>
										</li>
										{else}
										<li class="{$date->li_status}">
											{$date->date}
											<span>{$date->span_status}</span>
										</li>
										{/if}
										{/foreach}
									</ul>
								</div>

							</div>
						</div>

Výsledok v HTML

<div class="col-md-7 col-sm-12 col-xs-12">
							<label for="months" class="control-label">
								Výber mesiaca
							</label>
                            <select id="months" class="chosen-select noRadius">
								<option role="presentation tab" value="selectmonths" href="#selectmonths" aria-controls="selectmonths" data-toggle="tab">
									Vaberte Mesiac
								</option>
								<option role="presentation tab" value="januar" href="#januar" aria-controls="januar" data-toggle="tab">
									Január
								</option>
								<option role="presentation tab" value="februar" href="#februar" aria-controls="februar" data-toggle="tab">
									Február
								</option>
								<option role="presentation tab" value="marec" href="#marec" aria-controls="marec" data-toggle="tab">
									Marec
								</option>
								........
							</select>

							<div class="tab-content">

								<div role="tabpanel" class="tab-pane" id="januar">
									<ul class="list-inline calendar-date">
										<li class="free date_return">
											<a href="javascript:;" data-date="01.01.2016">
												01.01.2016
												<span>Voľné</span>
											</a>
										</li>
										<li class="free date_return">
											<a href="javascript:;" data-date="02.01.2016">
												02.01.2016
												<span>Voľné</span>
											</a>
										</li>
										<li class="free date_return">
											<a href="javascript:;" data-date="03.01.2016">
												03.01.2016
												<span>Voľné</span>
											</a>
										</li>
										<li class="free date_return">
											<a href="javascript:;" data-date="04.01.2016">
												04.01.2016
												<span>Voľné</span>
											</a>
										</li>
										<li class="free date_return">
											<a href="javascript:;" data-date="05.01.2016">
												05.01.2016
												<span>Voľné</span>
											</a>
										</li>
										.......
									</ul>
								</div>

							</div>
						</div>
Šaman
Člen | 2666
+
0
-

Udělej tabulku dnů jako závislou na tabulce měsíců. Takže u každého dne bude vazba na měsíc a pak si předáš do šablony jen tabulku měsíců a dny vypíšeš pomocí foreach. Bude to stejný případ, jako v dokumentaci vypsání všech knih autora.
(Informace o měsíci pak bude přímo na úrovni vazby v databázi a nemusíš mít tedy v tabulce dnů ani textový sloupec měsíc, ani rok – oba tyto údaje zjistíš v tabulce měsíců.)

SontoEremo
Člen | 341
+
0
-

Nazdar @Šaman ďakujem za odpoveď
Neviem si to vôbec predstaviť ako to myslíš

Editoval SontoEremo (11. 12. 2015 19:36)

SontoEremo
Člen | 341
+
0
-

Takže som spravi tabuľky
Tabuľka Mesiace

CREATE TABLE `months` (
  `id` int(11) NOT NULL,
  `month` varchar(32) COLLATE utf8_bin NOT NULL, <-- Názov Mesiaca
  `month_link` varchar(32) COLLATE utf8_bin NOT NULL <-- Odkaz na Mesiac čiže #januar
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

Tabuľka Dátum

CREATE TABLE `dates` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `date` varchar(10) COLLATE utf8_bin NOT NULL, <-- Dátum 01.01.2016
  `li_status` varchar(10) COLLATE utf8_bin NOT NULL, <-- Free or Busy (podľa tohto zafarbím pozadie)
  `span_status` varchar(32) COLLATE utf8_bin NOT NULL, <-- Voľný alebo Obsadený (to ide do <span></span>)
  `months_id` int(11) NOT NULL, <-- FOREIGN KEY na tabuľku Mesiace
  PRIMARY KEY (`id`),
  KEY `months_id` (`months_id`),
  CONSTRAINT `dates_ibfk_1` FOREIGN KEY (`months_id`) REFERENCES `months` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

KalendarPresenter

<?php
namespace App\Presenters;
use App\Repository\MonthsRepository;

class KalendarPresenter extends CommandPresenter {
	/** @var MonthsRepository */
	public $monthsRepository;

	public function __construct(MonthsRepository $monthsRepository) {
		$this->monthsRepository = $monthsRepository;
	}

	public function beforeRender() {
		$selectMonths = $this->monthsRepository->findAll()
		->where(':dates.months_id IN (?)');
		$this->template->Months = $selectMonths;
	}
}

Ale stále neviem ako to zobraziť v šablóne a ako poveďať koľko dní ma daný mesiac.
Čiže ak bude január

<div role="tabpanel" class="tab-pane" id="">
									<ul class="list-inline calendar-date">
									Od 01 po 31 dní
									</ul>
								</div>

Ale ak užívateľ si dá zobraziť v kalendári február
tak zobraz

<div role="tabpanel" class="tab-pane" id="">
									<ul class="list-inline calendar-date">
									Od 01 po 29 dní
									</ul>
								</div>