Как установить составной первичный ключ для подхода «все в одном» (сетка, определенная в файле JS, и данные, использующие класс jqGridEdit в файле php)?Пожалуйста, для меня составной первичный ключ таблицы T - это элементарный первичный ключ, который определен с некоторыми полями, принадлежащими этой таблице T!
Вот мой тест, но я не получаю данных и не могу использоватьОперации CRUD:
В моем файле JS у меня есть следующие строки кода:
...
colModel:[
{name:"index",index:"index",label:"index"}, // <= THAT'S JUST THE INDEX OF MY TABLE
{name:"user",index:"user",label:"user",key:true}, // <= A PART OF MY COMPOSITE PRIMARY KEY
{name:"pwd",index:"pwd",label:"pwd",key:true}, // <= A PART OF MY COMPOSITE PRIMARY KEY
{name:"state",index:"state",label:"state",key:true}, // <= A PART OF MY COMPOSITE PRIMARY KEY
... <= AND SO ON
url:"mygrid_crud.php",
datatype:"json",
jsonReader:{repeatitems:false},
editurl: "mygrid_crud.php",
prmNames:{"id":"index"} // <= WHAT I NEED TO WRITE HERE ???
...
В моем файле php (mygrid_crud.php):
...
$grid = new jqGridEdit($conn);
$query = "SELECT * FROM mytable WHERE user='$user' and pwd='$pwd' and state='$state'..."; // <= SELECT * it's ok or i need to specify all fields i need ?
$grid->SelectCommand = $query;
$grid->dataType = "json";
$grid->table = 'mytable';
$grid->setPrimaryKeyId('index'); // <= WHAT I NEED TO WRITE HERE ???
...
$grid->editGrid();
Пожалуйста, скажите мне, что не так, и как сделать, чтобы установить составной первичный ключ в этом подходе!?
Большое спасибо за турответы.
Итак, вот решение, которое я получаю после многих усилий ;-(
Возможно, это не оптимальное решение, но операции добавления, редактирования и dell работают хорошо!!!
Вот пример определения таблицы с КОМПОЗИТНЫМ ПЕРВИЧНЫМ КЛЮЧОМ:
CREATE TABLE `chat` (
`number` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(30) NOT NULL,
`pwd` varchar(100) NOT NULL,
`subject` varchar(100) NOT NULL,
`time` datetime NOT NULL,
`recipient` varchar(100) NOT NULL,
`message` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`user`, `pwd`, `subject`, `time`, `recipient`),
UNIQUE KEY `number` (`number`)
)
Таким образом, чтобы управлять такой таблицей с сеткой, я делаю следующее:
В моем HTML-файле есть следующие строки кода:
...
<table id='grid_chat'></table>
<div id='pager_chat'></div>
...
И в моем PHP-файле есть следующие строки кода:
...
$grid = new jqGridRender($conn);
…
if($oper=="edit"){…}
elseif($oper=="del"){…}
…
$grid->setPrimaryKeyId('number');
…
// here i get the primary key for the new message i want to add
$chat = $_SESSION["chat"];
$user = $chat["user"];
$pwd = $chat["pwd"];
$subject = $chat["subject"];
…
$query = "SELECT * FROM chat WHERE user='$user' and pwd='$pwd' and subject='$subject'...”;
$grid->SelectCommand = $query;
…
// for the UNIQUE KEY (used for edit and dell operations)
$grid->setColProperty("number", array("hidden"=>true));
// for the COMPOSITE PRIMARY KEY (used for add operation)
$grid->setColProperty("user", array("hidden"=>true,"editoptions"=>array("value"=> $user),"editrules"=>array("required"=>true)));
$grid->setColProperty("pwd", array("hidden"=>true,"editoptions"=>array("value"=> $pwd),"editrules"=>array("required"=>true)));
$grid->setColProperty("subject", array("hidden"=>true,"editoptions"=>array("value"=> $subject),"editrules"=>array("required"=>true)));
$grid->setColProperty("time", array("hidden"=>true,"editoptions"=>array("value"=> $time),"editrules"=>array("required"=>true)));
$grid->setColProperty("recipient", array("hidden"=>true,"editoptions"=>array("value"=> $recipient),"editrules"=>array("required"=>true)));
// for the message
$grid->setColProperty("message", array("classes"=>"multiligne","label"=>"Message","width"=>400,"edittype"=>"textarea","editrules"=>array("required"=>true)));
// Set a new user datetime format using PHP convensions (for the php time variable)
$grid->setUserTime('Y-m-d H:i:s');
…
Это не подход "все в одном", но он работает хорошо !!
Если кто-то увидит что-то для оптимизации, пожалуйста, ответьте мне !!!
С уважением,
Qualliarys