Skip to content

[5.8] Fix UPDATE and DELETE queries with join bindings on PostgreSQL#29306

Merged
taylorotwell merged 1 commit into
laravel:5.8from
staudenmeir:pgsql-bindings
Jul 27, 2019
Merged

[5.8] Fix UPDATE and DELETE queries with join bindings on PostgreSQL#29306
taylorotwell merged 1 commit into
laravel:5.8from
staudenmeir:pgsql-bindings

Conversation

@staudenmeir

@staudenmeir staudenmeir commented Jul 26, 2019

Copy link
Copy Markdown
Contributor

On PostgreSQL, Laravel implements UPDATE and DELETE queries with joins by adding their constraints after the WHERE constraints. If both clauses have bindings, their order is incorrect:

DB::table('comments')
    ->join('posts', function ($join) {
        $join->on('posts.id', '=', 'comments.commentable_id')
            ->where('comments.commentable_type', 'App\Post');
    })
    ->where('posts.active', 0)
    ->delete();
delete from "comments" USING "posts"
where "posts"."active" = 'App\Post'
  and "posts"."id" = "comments"."commentable_id"
  and "comments"."commentable_type" = 0

We have to put the where bindings before the join bindings.

We could also swap the constraints in the generated SQL, but that's quite cumbersome.

@derekmd

derekmd commented Jul 26, 2019

Copy link
Copy Markdown
Contributor

#18694 Related issue?

@staudenmeir

Copy link
Copy Markdown
Contributor Author

@derekmd Both issues are related to PostgreSQL's syntax for UPDATE and DELETE queries, but they aren't directly related to each other. I'm also working on a solution for #18694.

@taylorotwell
taylorotwell merged commit 518dcf9 into laravel:5.8 Jul 27, 2019
@staudenmeir
staudenmeir deleted the pgsql-bindings branch July 28, 2019 01:34
@driesvints

Copy link
Copy Markdown
Member

@staudenmeir thanks for all your help lately with these database issues! 👏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants