db icon indicating copy to clipboard operation
db copied to clipboard

Feature: Switch Query Builder insert method to use raw SQL and support multi-row inserts

Open JasonTheAdams opened this issue 2 years ago • 0 comments

Currently the Query Builder user wpdb::insert() under the hood to run the insert. This is lame for a couple reasons:

  1. You can't really do anything particularly complex as we're limited to what that function supports
  2. For example, you can only insert a single row at a time... Have 20 rows to insert? Too bad. Do it 20 times. 😭

Let's just ditch wpdb and build the SQL ourselves. We don't need them! I think as a good first step the following should be possible:

DB::table('post_meta')
	->insert([
		['post_id' => 1, 'meta_key' => 'foo', 'meta_value' => 'bar'],
		['post_id' => 1, 'meta_key' => 'foo2', 'meta_value' => 'bar2'],
		['post_id' => 1, 'meta_key' => 'foo3', 'meta_value' => 'bar3'],
	]);

Currently the insert signature contains a $format parameter. I'm inclined to just drop that and infer from the value type what it should be: strings should be strings, numbers should be numbers, and so forth. Crazy stuff! Dropping the last parameter shouldn't break anything since passing additional parameters in PHP doesn't throw an error.

JasonTheAdams avatar Sep 28 '22 23:09 JasonTheAdams