仅将唯一值插入数据库 table

Insert only unique values into db table

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

由于 Instagram 允许程序包每小时调用他们的 API 200 次,我正在尝试将 post link 保存到数据库 table 中。这个包获取 20 个最新的 posts 及其属性。

这里我试图比较 vinkla/instagram composer 包获取的 posts 的 link 和已经保存的 posts 并且只插入到 table。 下面是代码片段:

    $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();
            }               
        }
    }

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

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

foreach( $posts as $post)
{
    Insta::firstOrCreate(['link' => $post->images->low_resolution->url]);
}
...
foreach( $posts as $post)
{
    foreach( $fromDBs as $fromDB)
    {
        if($post->images->low_resolution->url != $fromDB->link)
        {
            $create = Insta::firstOrNew(['link' => $post->images->low_resolution->url]);

           if(! $create->id ) $create->save();
        }               
    }
}