仅将唯一值插入数据库 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上有firstOrCreate
或firstOrNew
辅助函数,所以只有当它不存在时才可以创建它,以防止重复。因此,您可以检查此代码而不是检查:
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();
}
}
}
我在 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上有firstOrCreate
或firstOrNew
辅助函数,所以只有当它不存在时才可以创建它,以防止重复。因此,您可以检查此代码而不是检查:
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();
}
}
}