我正在使用eloquent从我的数据库中提取App\Post
列表并从我的服务器中删除它们的文件内容。
我正在遍历列表并处理删除操作,成功后我想将值存储到相应的App \ Post但是我收到此错误:
Method save does not exist.
这是我的代码:
$posts_to_purge = Post::where('post_date', '<', \Carbon\Carbon::now()->subDays(7)->toDateString())->get();
if(count($posts_to_purge) > 0)
{
foreach ($posts_to_purge as $post) {
$directory = storage_path() . '/' . $post->post_date;
$deleted_folder = File::deleteDirectory($directory);
if($deleted_folder)
{
// 'purged' is a column in my Post table
$post->purged = 1;
}
else
{
Log::error('Unable to delete \''.$directory.'\' directory');
}
} // end foreach loop
// Update collection with purged posts
$posts_to_purge->save();
}
这方面的一个问题......这是最有效的方法吗?因为我只想更新集合中的某些记录..我应该创建一个单独的集合并仅保存它吗?
答案 0 :(得分:1)
收藏集实际上没有权力与Laravel中的数据库进行交互。您可以使用save()方法定义自定义集合类,但是有一种简单的方法可以执行您想要的操作。
$posts_to_purge = Post::where('post_date', '<', \Carbon\Carbon::now()->subDays(7)->toDateString())->get();
if(count($posts_to_purge) > 0)
{
foreach ($posts_to_purge as $post) {
$directory = storage_path() . '/' . $post->post_date;
$deleted_folder = File::deleteDirectory($directory);
if($deleted_folder)
{
// 'purged' is a column in my Post table
$post->purged = 1;
$post->save ();
}
else
{
Log::error('Unable to delete \''.$directory.'\' directory');
}
} // end foreach loop
// Update collection with purged posts
$posts_to_purge->save();
}
是的,每个更新的模型都会执行一次查询,但主键更新速度非常快。
如果您非常致力于使用一个查询,则只需将每个更新的Post的ID保存到数组中,然后执行Post::whereIn ('id', $updated_ids)->update(['purged' => 1]);