【问题标题】:Laravel Eloquent ORM - Removing rows and all the inner relationshipsLaravel Eloquent ORM - 删除行和所有内部关系
【发布时间】:2014-04-23 00:52:18
【问题描述】:

我有三个表,table1table2table3table1table2 是一对多的,table2table3 是一对多的。

我想调用Table1::find($id)::delete() 并删除table2table3 中的所有行。

我在表格中添加了以下内容:

表 1

public function delete()
{
    $this->table2()->delete();
    return parent::delete();
}

表2

public function delete()
{
    $this->table3()->delete();
    return parent::delete();
}

但是,我来自table3 的行没有被删除。如果我从模型table2 手动调用删除函数,Table3 的行将被删除。按照我写代码的方式,table2中的delete()函数不应该在table1调用的时候调用吗?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您不能在集合上调用 delete(),也不能在查询构建器上加载远相关的集合,以删除相关模型,所以您需要的是:

    // Table1 model
    public function delete()
    {
      $this->table2->each(function ($model2) {
        $model2->table3()->delete();
      });
    
      $this->table2()->delete();
      return parent::delete();
    }
    

    【讨论】:

      【解决方案2】:

      我认为这将依次删除所有相关的:

      // Table1
      public function delete()
      {
          $this->table2()->delete();
          $this->table2()->table3()->delete();
          return parent::delete();
      }
      

      【讨论】:

        【解决方案3】:

        我从 laracasts 中找到了这个,发现它对我很有用。 让我在这里粘贴答案: 所以我有两个模型 - User 和 Property User.php

        public function properties()
            {
                return $this->hasMany('App\Models\Property');
            }
        

        属性.php

        public function user()
            {
                return $this->belongsTo('App\User');
            }
        

        因此,如果我想删除特定用户,当然,我不希望他的任何属性保留在数据库中:

        public function destroy($id)
            {
                $user = User::findOrFail($id);
        
                $user->properties()->delete();
        
                $user->delete();
        
                return [
                    'message' => 'Delete Complete!'
                ];
            }
        

        我希望你或其他人觉得这很有用!问候:)

        来源:https://laracasts.com/discuss/channels/eloquent/laravel-delete-model-with-all-relations

        【讨论】:

          猜你喜欢
          • 2016-05-01
          • 2012-12-19
          • 2015-05-14
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 2015-04-09
          • 2017-12-17
          • 2018-11-03
          相关资源
          最近更新 更多