我有文章的图像,当我更新文章时,我想检查图像是否相同,如果不是,我想删除它们,但如果可能的话,我想删除整个集合而不需要另一个查询,就像我在$images->delete();
下面的代码中所拥有的一样。这是我的功能:
$images = Media::where('article_id', $article->id)->get();
foreach($images as $image) {
$article_images[] = $image->original_name;
}
foreach($files as $file) {
$filePathArr = explode('/', $file);
$fileName = array_pop($filePathArr);
$originalFile = explode('-', $fileName);
$originalFileName = array_pop($originalFile);
$newFiles[] = $originalFileName;
}
if ($newFiles != $article_images){
$images->delete();
}
不进行查询就不能从数据库中删除。
你将不得不像这样提出新的请求:
Media::where('article_id', $article->id)->delete();
这只是一个简单的查询,所以不应该有任何性能损失。
如果我们正在讨论包含100个项目的集合,您可以这样优化查询:
Media::whereIn('id', $images->pluck('id'))->delete();
如果你有你的模型链接,你可以。
类Exercise.php:/**
* Exercise belongs to exactly one lecture
*
* @return 'Illuminate'Database'Eloquent'Relations'BelongsTo
*/
public function lecture()
{
return $this->belongsTo(''App'Lecture');
}
和Class Lecture.php:
/**
* Gets all the exercises asociated to this lecture
* @return 'Illuminate'Database'Eloquent'Relations'HasMany
*/
public function exercises()
{
return $this->hasMany(''App'Exercise');
}
然后你可以在你的控制器中输入:
public function delete($id, DeleteLectureRequest $request)
{
$lecture = Lecture::findOrFail($id);
$lecture->exercises()->delete(); // easy
}
(想象你的文章==我的讲座,你的媒体==我的练习)
当然,首先你必须在DB中设置适当的外键,并以这种方式链接你的模型。
我将通过调用Model::get()
或Model::all()
后执行以下操作来删除整个集合
$posts = Post::all();
// Logic
// More logic
$posts->map->delete();