nefunkční cizí klíče (dokumentaci jsem četl)
- m.himlar
- Člen | 15
Zduř,
mám takovéto tabulky:
SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
DROP TABLE IF EXISTS `roles`;
CREATE TABLE `roles` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`title` varchar(255) COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`nickname` varchar(255) CHARACTER SET utf8 NOT NULL,
`password` varchar(255) CHARACTER SET utf8 NOT NULL,
`name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`surname` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`email` varchar(255) CHARACTER SET utf8 NOT NULL,
`public` tinyint(1) NOT NULL DEFAULT '1',
`roles_id` int(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `roles_id` (`roles_id`),
CONSTRAINT `users_ibfk_1` FOREIGN KEY (`roles_id`) REFERENCES `roles` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;
v php volám dotaz nějak takto:
$row = $this->database->table('users')->where('nickname', $username)->fetch();
a pak chci vytáhnout pomocí cizího klíče role:
$row->role->name;
nebo
$row->roles->name;
toto ale zavolá absolutně nesmyslnou chybu:
PDOException #42S22
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'COLUMN_NICKNAME' in 'field list'
jedině, co funguje je:
$row->ref('roles','roles_id')->name;
ale nechápu, proč nefunguje jedno z předchozích řešení? ať jsem hledal jak jsem hledal, nenašel jsem správné řešení ani někoho, kdo by řešil stejný problém … kolega si taky neví rady, nějaký nápad?
věřím, že to bude úplná pitomost, kterou přehlížím :)
- David Matějka
- Moderator | 6445
Zkus promazat cache.
A precti si, jak formatovat kod, tentokrat jsem to opravil, ale pro priste ;)
- m.himlar
- Člen | 15
ok, díky :)
no cache jsem promazal, i při každé změně, ale bez úspěchu :-/
ještě pro jistotu composer.json:
{
"name": "nette/sandbox",
"description": "The sandbox is a pre-packaged Nette Framework project, basic configured structure for your application.",
"homepage": "https://nette.org",
"type": "project",
"license": ["Unlicense"],
"authors": [
{
"name": "David Grudl",
"homepage": "http://davidgrudl.com"
},
{
"name": "Nette Community",
"homepage": "https://nette.org/en/contributors?lang=en"
}
],
"require": {
"php": ">= 5.3.7",
"nette/nette": "~2.2.0",
"dg/adminer-custom": "~1.5",
"nextras/datagrid": "2.1.2"
},
"require-dev": {
"nette/tester": "~1.0"
},
"minimum-stability": "stable"
}
Editoval m.himlar (15. 4. 2015 14:50)
- David Matějka
- Moderator | 6445
Zkusil jsem tvuj kod a funguje mi. Nezatajujes neco? :) nepouzivas tam
nejakym divnym zpusobem konstanty COLUMN_NICKNAME
?