我正在使用Yii afterdelete()更新在另一个表中删除的相关数据。 这是我在控制器中的代码:

控制器动作

public function actionDelete($id)
{
    if(Yii::app()->request->isPostRequest)
    {
        // we only allow deletion via POST request
        $this->loadModel($id)->delete();

        // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }
    else
        throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}

模型功能

  protected function afterDelete()
   {
        parent::afterDelete();
        $show_model = new Show();
        $show_model = Show::model()->findAll('tbl_season_id='.$this->id);
        $show_model->updateAll('tbl_season_id = NULL, on_season=0');

   }

#1楼 票数:3 已采纳

正如@Gregor所说,充分利用主动记录关系将使工作变得容易得多。 因此,在Show模型中,您将具有以下内容:

     public function relations()
     {
        return array(
            'season' => array(self::BELONGS_TO, 'Season', 'tbl_season_id'),
        );
     }

在“ 季节”模型中,您将具有以下内容:

     public function relations()
     {
        return array(
            'shows' => array(self::HAS_MANY, 'Show', 'tbl_show_id'),
        );
     }

定义关系后,您将可以执行以下操作:

     public function afterDelete()
     {
         parent::afterDelete();
         $season_shows = Season::model()->findByID($id)->shows; //using the shows relation
         foreach($season_shows as $season_show) do
         {
            $season_show->setAttributes('tbl_season_id => NULL, on_season => 0');
            $season_show->save();
         }

     }

Hummm,但如果你注意到了这第二行afterDelete这就要求findByID($id)但我们内部afterDelete和记录实际上是死的(删除)!

要解决此问题,您可以在删除模型之前使用variablebeforeDelete来获取id

    //at the begining of your model class
    $private = $cached_season_id;
    ...
    //then somewhere at the end
    ... 
    public function beforeDelete()
     {
          $this->cached_tbl_season_id = $this->id;
          return parent::beforeDelete();
     }

现在,如果将afterDeleteid更改为$this->cached_season_id ..,它应该可以工作。

好吧,这个解决方案基于这个yii-fourm-topic ,我不确定它是否能正常工作! 因此,尝试一下,让我们知道会发生什么?

#2楼 票数:1

从Season到Show,这看起来很像HAS_MANY关系,因此您将来可能希望使用关系来获取相关记录。 在yii-guide中有一个很好的文档: http ://www.yiiframework.com/doc/guide/1.1/en/database.arr

在我看来,您也有jQuery背景。 您正在数组上调用updateAll(由findAll函数返回)。 正确的updateAll-call可能看起来像这样:

Show::model()->updateAll(array("tbl_season_id"=>null, "on_season"=>0), "tbl_season_id = $this->id")

如果有某种约束,这可能会更好,但是由于这只是个口味问题,我将保留它。

  ask by Mahsa Teimourikia translate from so

未解决问题?本站智能推荐:

1回复

Yii-按另一个表排序

我正在使用Yii框架,并且由于我是新手而在查询时遇到麻烦。 我的数据库中有两个表: 用户:ID,用户名,密码,全名 朋友ID,用户ID,朋友ID 我声明了这些关系并通过使用以下方法来获得用户的朋友: 我的问题是我想获取在users表中按“全名”列排序的朋友列表。
1回复

Yii-如何在DetailView中显示来自另一个表的数据

我正在做一个项目。 我想在detailview中显示来自另一个表的数据。 到目前为止,我试图像下面这样编码。 QController中的actionView: 然后,在views / q / view.php中的detailview 在该示例中,我想显示optionA但
2回复

Yii-如何从另一个模型获取数据

早上好 如何从其他模型获取数据? 我有一个搜索字段,需要在其中搜索项目名称。 然后我的Cgridview将显示选定的项目。 我的关系中有这个 我试图在模型的搜索功能中访问project_name。 当我这样做时,我得到一个错误。 CDbCommand无法
1回复

Yii-从表中存储的数据创建链接

香港专业教育学院一直在试图思考/找到解决我遇到的问题的方法。 我为我的Yii应用程序创建了一个菜单系统,但我需要在表中存储创建URL所需的部分项目。 我有一个名为system_menu_item的表: ------------------------------------------
2回复

YII - 向dropDownList添加另一个属性

我将向dropDownList添加另一个属性。 我将使用Yii dropDownList这样的下拉列表: 我将测试属性添加到选项标签。 默认Yii dropDownList是: 我怎么能这样做?
2回复

Yii-在3个表之间保存数据

我正在使用Yii和jQuery Mobile。 我目前有3个表:Users,Projects和ShareProjects。 我已经能够创建一个功能来显示与该用户共享的项目,但是我正在努力将用户分配给项目。 我已经尝试过此代码,但到目前为止仍未成功。 在项目中,有一个共享按钮,它带有
3回复

Yii-更新CListView中的字段

是否可以在CListView中更新单个字段? 我正在寻找一种解决方案,允许用户在所有表记录的此视图中编辑其记录。 一个示例是用户具有关联约会的列表。 他们可能希望快速将约会标记为低/高优先级,而无需进入更新视图本身。 除了CListView之外,是否还有用于此类功能的小部件?
2回复

Yii-自参考表

这是我的类别表 我的yii网格视图显示父类别ID而不是名称。 如何在网格视图中显示父类别名称。 我必须在上面的代码中进行哪些更改。 谢谢。