首页 > 解决方案 > 如何在没有密钥的情况下删除 Laravel 中的 hasMany 关系

问题描述

我试图删除 hasMany 关系但无济于事。

我有三个表:usersuser_detailsmanufacturers

User有一个user_details

user_details属于user

manufacturers有很多users通过user_details

现在当管理员删除制造商时,它需要删除所有具有该制造商ID的user_details和所有相关用户。

我的桌子:

用户:

id, unique_id, first_name, last_name, user_name, email, password, remember_token, created_at, updated_at, deleted_at

用户详细信息

id, user_id, avatar, locale, role_id, manufacturer_id, account_status, hospital_id, phone, city_id, created_at, updated_at, deleted_at

制造商

id, name, status, created_at, updated_at, deleted_at

我正在尝试这样做:

    /**
     * @return bool|null
     * @throws \Exception
     */
    public function softDelete()
    {
        $this->brand_presentations()->delete();
        $this->details()->delete();
        return parent::delete();
    }

在这里,我有我的关系:

public function brand_presentations()
{
    return $this->hasMany(Brand_presentations::class, 'manufacturer_id', 'id')->withTrashed();
}

public function details()
{
   return $this->hasMany(User_details::class, 'manufacturer_id')->withTrashed();
}

这让我一直到user_details,但我无法获得用户。我怎样才能得到用户?

标签: laravel

解决方案


如果我对您的理解正确,您需要遍历您的详细信息才能删除用户

/**
 * @return bool|null
 * @throws \Exception
 */
public function softDelete()
{
    $this->brand_presentations()->delete();
    $details = $this->details
       foreach($details as $detail) {
          $user = detail->user
          // Delete or access user here
          $detail->delete()
       }
}

推荐阅读