仅将唯一值插入数据库表

时间:2018-11-21 10:01:16

标签: php laravel laravel-5.7

我在Laravel中使用vinkla/instagram作曲家软件包在我的应用程序中获取Instagram帖子。

由于Instagram允许程序包每小时调用其API 200次,因此我试图将帖子链接保存到数据库表中。此程序包可获取20条最新帖子及其属性。

在这里,我正在尝试比较vinkla/instagram作曲家软件包中提取的帖子和已经保存的帖子的链接,仅将unique插入表中。 下面是代码片段:

    $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次。 仅一次插入唯一链接的正确方法是什么。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

...
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();
        }               
    }
}
相关问题