jednoduchy join tabuliek nefunguje. berie iba jednoduche query
- stewestw
- Člen | 42
zdravim, snazim sa o jednoduchy join, kde mam 2 tabulky a to:
tabulka nette_articles
- id_article (primary key)
- id_category (foreigin key)
- title
- alias
- introtex
- ...
a
tabulka nette_categories
- id_category(primary key)
- id_parent
- title
- alias
- ...
snazim sa cez jeden join ziskat clanky a nazov kategorie namiesto id nasledovne:
$articles = $this->database
->table('nette_articles')
->select('nette_articles.*')
->select('nette_categories.title AS category_title')
->order('title ASC')
->limit($paginator->getLength(), $paginator->getOffset());
stale mi vyhadzuje error: No reference found for $nette_articles->nette_categories.
viete mi prosim poradit?
dakujem.
- David Matějka
- Moderator | 6445
viz doc
Musíme napsat pouze jméno „spojovacího klíče“ relace a název sloupce spojené tabulky. „Spojovací klíč“ je odvozen od jména sloupce, který odkazuje na tabulku, se kterou se chceme spojit.
(nikoliv tedy od nazvu tabulky)
takze v tvem pripade tam bude
->select('category.title AS category_title')
- stewestw
- Člen | 42
dakujem za pomoc. upravil som to na:
$articles = $this->database
->table('nette_articles')
->select('*, category.title AS category_title')
->order('title ASC')
->limit($paginator->getLength(), $paginator->getOffset());
uz sa to pohlo, ale teraz to hadze: Array to string conversion.
vies mi prosim poradit, kde to este moze robit problem?
dakujem za pomoc.
- David Matějka
- Moderator | 6445
A kde to hazi tu chybu?
(nejlepe prihod ladenku, nebo alespon screen)
- David Matějka
- Moderator | 6445
hm, tohle neni v poradku :)
muzes sem hodit sql dump tech dvou tabulek? co mas v latte? a jakou mas verzi nette?
- stewestw
- Člen | 42
sql dump je:
--
-- Table structure for table `nette_articles`
--
DROP TABLE IF EXISTS `nette_articles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nette_articles` (
`article_id` int(11) NOT NULL AUTO_INCREMENT,
`category_id` int(11) DEFAULT NULL,
`title` varchar(255) NOT NULL,
`alias` varchar(255) DEFAULT NULL,
`introtext` text,
`fulltext` longtext,
`params` text,
PRIMARY KEY (`article_id`),
KEY `id_category_idx` (`category_id`),
CONSTRAINT `id_category` FOREIGN KEY (`category_id`) REFERENCES `nette_categories` (`category_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `nette_articles`
--
LOCK TABLES `nette_articles` WRITE;
/*!40000 ALTER TABLE `nette_articles` DISABLE KEYS */;
INSERT INTO `nette_articles` VALUES (8,1,'test article 1','test-article-1','introtext pre article','fulltext pre article','{}'),(9,1,'test article 1','test-article-1','introtext pre article','fulltext pre article','{}'),(10,1,'test article 1','test-article-1','introtext pre article','fulltext pre article','{}'),(11,1,'test article 1','test-article-1','introtext pre article','fulltext pre article','{}');
/*!40000 ALTER TABLE `nette_articles` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `nette_categories`
--
DROP TABLE IF EXISTS `nette_categories`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `nette_categories` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`alias` varchar(255) NOT NULL,
`introtext` text,
`fulltext` longtext,
`params` text,
`module` varchar(45) NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `nette_categories`
--
LOCK TABLES `nette_categories` WRITE;
/*!40000 ALTER TABLE `nette_categories` DISABLE KEYS */;
INSERT INTO `nette_categories` VALUES (1,0,'ukazkova kategoria 1','ukazkova-kategoria-1','toto je introtext pre kategoriu 1','toto je fulltext pre kategoriu 1','{}','articles'),(2,0,'ukazkova kategoria 2','ukazkova-kategoria-2','toto je introtext pre kategoriu 2','toto je fulltext pre kategoriu 2','{}','articles');
/*!40000 ALTER TABLE `nette_categories` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
verzia nette je 2.2.
skusal som strasne vela variant, ako by to mohlo zbehnut, ale bez uspechu :(
prepisal som este v tabulkach klluce teraz, nech nezacinaju id_<nieco>,
ale opacne(ak by to bol prob), ako je to aj v navodoch, na ktore si mi poslal
link(toto je uz upraveny sql dump).
- David Matějka
- Moderator | 6445
jsi si jisty, ze to zpusobuje ten dotaz napsany vyse? Nemas jeste v sablone nejaky dalsi dotaz? (pred related, ref apod.)…
mas nejnovejsi nette, tedy 2.2.7?
a muzes zkusit dumpnout $join
jak to vyhazuje tu chybu?
ja to zkousel u sebe a fungovalo mi to…
- stewestw
- Člen | 42
prave mi to zbehlo.
prvy prob, som mal bol cache(nepremazala sa)
druhy som mal povodne:
->select('*')
->select('category.title AS category_title')
a malo byt
->select('nette_articles.*')
->select('category.title AS category_title')
teraz mi to zbehlo.
dakujem ti za pomoc. velmi si mi pomohol.