Вставлять только уникальные значения в таблицу БД - PullRequest
0 голосов
/ 21 ноября 2018

Я использую пакет vinkla/instagram composer в моем Laravel для получения постов Instagram в моем приложении.

Поскольку Instagram позволяет пакету вызывать свой API 200 раз в час, я пытаюсь сохранить ссылки ссылок в таблицу базы данных.И этот пакет извлекает 20 последних сообщений и его атрибуты.

Здесь я пытаюсь сравнить ссылку на сообщения, извлеченные из пакета vinkla/instagram composer, и уже сохраненные сообщения и вставить только уникальные в таблицу.Ниже приведен фрагмент кода:

    $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 голосов
/ 21 ноября 2018
...
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();
        }               
    }
}
0 голосов
/ 21 ноября 2018

В eloquent есть вспомогательные функции firstOrCreate или firstOrNew, поэтому вы можете создать их, только если они не существуют, чтобы предотвратить дублирование.Таким образом, вместо вашего чека вы можете проверить этот код:

foreach( $posts as $post)
{
    Insta::firstOrCreate(['link' => $post->images->low_resolution->url]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...