Di yii ane baru tau nih, ternyata sebuah tabel itu tidak bisa dilakukan (View, Update, Delete) jika Primary Key pada tabel tersebut bukan integer, buktinya ane punya tabel tipe datanya varchar, sama sekali tidak bisa tuh, yang ada muncul pesan
Error 404
The requested page does not exist.
ini contoh hasil generate dengan gii utk update.php
Bagaimana yah solusinya? karena jika tipe datanya pada tabel tersebut saya ubah ke integer, maka banyak sekali yg di ubah krn banyak relasi ke tbl lain. Bagimana solusinya? apa yg harus saya ubah pada koding di atas?
....
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Product']))
{
$model->attributes=$_POST['Product'];
if($model->save())
$this->redirect(array('view','id'=>$model->ProductID));
}
$this->render('update',array(
'model'=>$model,
));
}
....
Untuk sekedar tambah data itu bisa, tapi untuk yg lainnya termasuk delete itu tidak berhasil. Untuk lebih jelasnya, silakan om bisa buktikan sendiri dengan generate ulang sebuah tabel dengan PK=varchar, analisa sy seperti ini om, sy coba di mysql dengan SQL Query
1. Jika integer-> maka SELECT * FROM `tbl_product` WHERE WHERE ProductID=1 (benar)
2. Jika varchar-> maka SELECT * FROM `tbl_product` WHERE ProductID='KMS' (benar)
3. Jika varchar-> maka SELECT * FROM `tbl_product` WHERE ProductID=KMS (salah karena tidak ada tanda kutip)
Di yii kasusnya sama seperti no.3, maka menjadi
WHERE ProductID=KMS (tanda petik tidak ada)
Prediksi sy tanda petik itu yg jadi masalah, karena jika sy coba di SQL Query maka tidak berhasil jika tidak ada tanda kutip. Gimana caranya menangani masalah itu?
public function loadModel($id)
{
$model=Item::model()->findByPk($id); // hapus int(), karena Pk kita adalah varchar <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
Setelah sy coba2 ternyata bisa, sy hanya hanya ubah jadi seperti ini (sama seperti cara pertama punya YiieRz)
public function loadModel($id)
{
$model=Product::model()->findByPk($id);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
akhirnya berhasil juga tanpa harus seting urlManagernya.
terimakasih buat YiieR. Semoga ini bisa membantu yg lain juga.
Wah kasusnya sama persis yg sedang ane kerjakan Gan. Ane pake postgreSQl, PK nya character varying. cuma bisa input. Update cuma bisa yg berupa angka, padahal PK ane angka + huruf (123-g). Mohon pencerahannya Gan…ane dah coba cara 1 tetep lum bisa :
public function loadModel($id)
{
$model=PameranManca::model()->findByPk($id);
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
return $model;
}
Dan yang cara 2 bingung bagian urlManager yg mana yg dirubah :