Когда я удаляю сообщение (кампанию), платежи, связанные с удаленной кампанией, все еще находятся в БД, я также хочу удалить ее. (laravel, контроллер) - PullRequest
2 голосов
/ 21 февраля 2020

нужна помощь, пожалуйста

когда я удаляю кампанию с моей краудфандинговой платформы, я получаю сообщение об ошибке, если в этой кампании уже есть платежи,

платежи все еще в базе данных без кампании, поэтому я получил ошибку в моем представлении списка платежей. мое единственное решение - go для базы данных и удаления платежей, которые принадлежат удаленной кампании.

когда я удаляю кампанию, он также должен удалять свои собственные платежи

  • Контроллер кампании (функция удаления):
    public function deleteCampaigns($id = 0){
        if(config('app.is_demo')){
            return redirect()->back()->with('error', __('app.feature_disable_demo'));
        }

        if ($id){
            $campaign = Campaign::find($id);
            if ($campaign){
                $campaign->delete();
            }
        }
        return back()->with('success', trans('app.campaign_deleted'));
    }

каждый платеж в базе данных связан с campaign_id из таблицы кампании

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Если у вас правильно настроены отношения toMany для модели Campaign, тогда вы можете просто позвонить delete() для этого отношения, и он должен удалить все связанные платежи, если нет дополнительных ограничений.

Так при условии, что отношение toMany к платежу называется payments, тогда:

if ($campaign){
  $campaign->payments()->delete();
  $campaign->delete();
}

РЕДАКТИРОВАТЬ:

Согласно тому, что Алекс Ма c упоминает в комментарии, это может или не может быть лучшее решение для вашей проблемы, хотя я считаю, что это самый простой ответ. Прочитайте ответы на этот Вопрос

0 голосов
/ 21 февраля 2020

Вы можете создать ограничение внешнего ключа в своей миграции. Например,

$table->foreign('campaign_id') ->references('id')->on('payments') ->onDelete('cascade');

Таким образом, когда вы удаляете кампанию, она удалит свою модель ограничения внешнего ключа платежа или, проще говоря, ее красноречивое отношение hasMany.

...