jednoduchy join tabuliek nefunguje. berie iba jednoduche query

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

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

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

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

A kde to hazi tu chybu?
(nejlepe prihod ladenku, nebo alespon screen)

David Matějka
Moderator | 6445
+
0
-

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

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

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

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.