首页 > 解决方案 > 仅将唯一值插入数据库表

问题描述

vinkla/instagram在我的 Laravel 中使用 composer 包来获取我的应用程序中的 Instagram 帖子。

由于 Instagram 允许包每小时调用他们的 API 200 次,我试图将帖子链接保存到数据库表中。这个包获取 20 个最新的帖子及其属性。

在这里,我试图比较vinkla/instagram作曲家包获取的帖子链接和已经保存的帖子,并仅将唯一的插入到表中。下面是代码片段:

    $instagram = new Instagram('access-token');
    $posts = $instagram->media(); //gets 20 latest insta posts of a user
    $fromDBs = Insta::orderBy('id', 'desc')->take(20)->get(); //get last 20 rows from table
    foreach( $posts as $post)
    {
        foreach( $fromDBs as $fromDB)
        {
            if($post->images->low_resolution->url != $fromDB->link)
            {
                $create = new Insta;
                $create->link =  $post->images->low_resolution->url;
                $create->save();
            }               
        }
    }

使用上述代码,新链接是插入x10时间。仅插入一次唯一链接的正确方法是什么。

标签: phplaravellaravel-5.7

解决方案


eloquent上有firstOrCreatefirstOrNew辅助函数,因此只有在它不存在时才能创建它以防止重复。因此,您可以检查以下代码,而不是检查:

foreach( $posts as $post)
{
    Insta::firstOrCreate(['link' => $post->images->low_resolution->url]);
}

推荐阅读