![](/img/trans.png)
[英]How do you return a single column from a eloquent relationship in Laravel 6?
[英]How do i delete all rows based on a single column in one to many relationship in laravel eloquent?
刪除特定電影時,我想刪除與其相關的所有放映時間。 我有 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.