Andreas Hunter
Andreas Hunter

Reputation: 5024

Why stored duplicate rows to table

I have custom query for adding parsed remote posts to table:

foreach ($parsedPosts as $post) {
    $hasRemotePostAlready = Post::where('remote_post_id', $post->id)->first();
    if(null === $hasRemotePostAlready) {
        $data = [
            'title' => $post->title,
            'description' => $post->description,
            'remote_post_id' => $post->id
        ];
        Post::create($data);
    }
}

Variable $parsedPosts has more then 3500 posts and when I run my script to add posts then any remote posts duplicated. Why they posts duplicated and why not work my condition:

$hasRemotePostAlready = Post::where('remote_post_id', $post->id)->first();

How I can fix duplicating rows problem in my case?

Upvotes: 0

Views: 83

Answers (1)

nakov
nakov

Reputation: 14318

You can use firstOrCreate or updateOrCreate methods for this case, take a look at the documentation

In your case try this:

$hasRemotePostAlready = Post::firstOrCreate(
  [
      'remote_post_id' => $post->id // columns to check if record exists
  ],

  [
      'title' => $post->title,
      'description' => $post->description
  ]
);

Upvotes: 1

Related Questions