簡體   English   中英

如何在laravel eloquent中基於一對多關系中的單個列刪除所有行?

[英]How do i delete all rows based on a single column in one to many relationship in laravel eloquent?

刪除特定電影時,我想刪除與其相關的所有放映時間。 我有 3 個與此查詢相關的表。

  1. Showtime(與時間表有 mm 關系(數據透視表 showtime_time)
  2. 時代
  3. 電影

我試過的是:

電影控制器:

public function destroy($id)
{
    $movie = Movie::findOrFail($id);
    if (ShowTime::where('movie_id', '=', $id)->exists()) {
        $showtimes = ShowTime::whereIn('movie_id', '=', $id)->get();
        foreach ($showtimes as $showtime) {
            $showtime->times()->detach();
            $showtime->delete();
            $movie->delete();
        }
        return back();
    } else {
        $movie->delete();
    }
    return redirect()->route('movies.index');

}

這給了我這個錯誤。

傳遞給 Illuminate\\Database\\Query\\Builder::cleanBindings() 的參數 1 必須是數組類型,給定字符串,在 C:\\Users\\lenovo\\cinetime_nepal_backend\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query 中調用\\Builder.php 第 907 行

模型類

<?php

namespace Modules\Movie\Entities;
use Illuminate\Database\Eloquent\Model;
class Movie extends Model
{
    protected $guarded = ['id']; //fillable
    protected $hidden = ['created_at', 'updated_at'];

    public function showTimes()
    {
        return $this->hasMany(ShowTime::class, 'movie_id');
    }
}

這就是我在 showtimecontroller 中刪除 showtime 的方式

放映時間控制器

public function destroy($id)
{
    $showtime = ShowTime::findOrFail($id);
    $showtime->times()->detach();
    $showtime->delete();
    return back();
}

我是 laravel 的新手,我搜索並嘗試了本網站中回答的許多代碼,但無法幫助自己。 請幫忙

如果您使用 MySQL,您可以將“ON DELETE CASCADE”添加到您的外鍵。 這將在刪除父項時自動刪除引用父項的所有記錄。 只需將其放入您的放映時間遷移中

$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');

或者,如果您不想要這種方法,那么您可以在您的電影模型中覆蓋您的刪除方法。 將此代碼放入您的電影模型中。

public function delete() {
    $this->showTimes()->times()->delete();
    $this->showTimes()->delete();
    parent::delete();
}

然后在您的控制器中,您只需刪除您的電影就可以了。

public function destroy($id)
{
    $movie = Movie::findOrFail($id);
    $movie->delete();

    return redirect()->route('movies.index');

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM