PDA

View Full Version : insert کردن با active record



masiha68
پنج شنبه 25 دی 1393, 19:28 عصر
سلام
در مورد اکتیو رکورد یه مشکل اساسی پیش اومده واسم . وقتی مدل رو نیو میکنم و اطلاعات رو اینزرت می کنم اطلاعات سیو نمی شن


if(isset($_POST['username'])) {
$insertComment=new Webcomment(); $insertComment->comment=$_POST['comment']; $insertComment->name=$_POST['username']; $insertComment->email=$_POST['email']; $insertComment->state=0; $insertComment->time=time(); $insertComment->save(); if($insertComment->save()) { $msg ="دیدگاه شما ارسال شد و بعد از تایید مدیر وب در وبسایت نمایش داده میشود ."; } }
به نظرتون مشکل از کجاست

Veteran
پنج شنبه 25 دی 1393, 19:38 عصر
چرا دوبار متد save رو صدا زدین!
این کد رو تست کنید ببینید خروجی چیه


if(isset($_POST['username'])) {
$insertComment = new Webcomment();
$insertComment->comment = $_POST['comment'];
$insertComment->name = $_POST['username'];
$insertComment->email = $_POST['email'];
$insertComment->state = 0;
$insertComment->time = time();
if($insertComment->save()) {
$msg = "دیدگاه شما ارسال شد و بعد از تایید مدیر وب در وبسایت نمایش داده میشود .";
}else{
echo CVarDumper::dump($insertComment->errors,10,true);
}
}

masiha68
پنج شنبه 25 دی 1393, 22:33 عصر
ممنونمشکل از مدل و رول بود که یکی از فیلدها به صورت ریکویرد تعریف شده بود

under22
پنج شنبه 25 دی 1393, 22:48 عصر
چرا اینطوری استفاده میکنید
من اینطوری استفاده میکنم خیلی راحتم


$model=new User;
if(isset($_POST['User'])){
$model->attributs=$_POST['User'];
if($model->validate() && $model->save()){
//ذخیره شد با موفقیت
}
else{
//داده ها ذخیره نشد
}
}
$this->render('login',array('model'=>$model));

اینطوری با یه اکشن خیلی تمیز میتونی هم داده هاتو insert کنی هم اینکه فرم رو نمایش بدی البته باید تو ویو از cactiveform استفاده کنی

masiha68
پنج شنبه 25 دی 1393, 23:01 عصر
بیشتر دوس دارم با اکتیور رکورد سر کله بزنم وگرنه میدونم اونجوری هم میشه ...
البته هنوز نمیدونم چرا یی انقد روی اکتیو رکورد اصرار می کنه در حالی که کوئری بیلدینگ راحتر و قابل فهم تره

under22
پنج شنبه 25 دی 1393, 23:06 عصر
بیشتر دوس دارم با اکتیور رکورد سر کله بزنم وگرنه میدونم اونجوری هم میشه ...
البته هنوز نمیدونم چرا یی انقد روی اکتیو رکورد اصرار می کنه در حالی که کوئری بیلدینگ راحتر و قابل فهم تره
اتفاقا اکتیو رکوردی که ایی داره فریمورک های دیگه مثل لاراول و کدیگنیتر ندارن . البته نمیگم برای اونا ضعیفه ولی برای ایی خیلی قوی هست من نمیدونم چطوری میگید کوئری بیلدینگ قابل فهم تره !
همین روشی که گفتم میشه ترکیبی با چند تا مدل انجام داد خیلی ساده من نمونشو ندیدم تو فریمورک های دیگه
من که همه کار هامو خیلی راحتو سریع با اکتیو رکورد انجم میدم

masiha68
پنج شنبه 25 دی 1393, 23:23 عصر
قبلا یه کلاس کار با پی دی او گرفته بودم که به صورت کوئری بیلدینگ کار می کرد و خودمم رو همون کلاس یه کلاس نوشته بودم که کار با دیتابیس رو مثل اب خوردن میکرد مثلا سلکت اینجوری بود


$this->do_show('post')
ya insert karan
$this->do_insert('post',$_POST')


خیلی باهاش راحت بودم (یادش بخیر)
این اکتیو رکورد هم اگه بلد نباشی باهاش کار کنی خیلی جاها دردسر میشه . گاهی اطلاعت اضافی رو از دیتابیس میگیره که اصلا بهشون نیازی نیست .

under22
جمعه 26 دی 1393, 13:18 عصر
قبلا یه کلاس کار با پی دی او گرفته بودم که به صورت کوئری بیلدینگ کار می کرد و خودمم رو همون کلاس یه کلاس نوشته بودم که کار با دیتابیس رو مثل اب خوردن میکرد مثلا سلکت اینجوری بود


$this->do_show('post')
ya insert karan
$this->do_insert('post',$_POST')


خیلی باهاش راحت بودم (یادش بخیر)
این اکتیو رکورد هم اگه بلد نباشی باهاش کار کنی خیلی جاها دردسر میشه . گاهی اطلاعت اضافی رو از دیتابیس میگیره که اصلا بهشون نیازی نیست .
یعنی چی اطلاعات اضافی میگیره !!!
شما میتونید بگید که کدو فیلد ها رو نیاز دارید فقط همون ها رومیاره

qartalonline
جمعه 26 دی 1393, 20:29 عصر
چرا اینطوری استفاده میکنید
من اینطوری استفاده میکنم خیلی راحتم


$model=new User;
if(isset($_POST['User'])){
$model->attributs=$_POST['User'];
if($model->validate() && $model->save()){
//ذخیره شد با موفقیت
}
else{
//داده ها ذخیره نشد
}
}
$this->render('login',array('model'=>$model));

اینطوری با یه اکشن خیلی تمیز میتونی هم داده هاتو insert کنی هم اینکه فرم رو نمایش بدی البته باید تو ویو از cactiveform استفاده کنی

البته تو خط چهارم نیازی به نوشتن $model->validate() نیست.

under22
جمعه 26 دی 1393, 20:39 عصر
البته تو خط چهارم نیازی به نوشتن $model->validate() نیست.
درسته وقتی میخاد ذخیر کنه قبلش خودش ولیدیت رو انجام میده