Insert
¶
use Formal\AccessLayer\{
Query\Insert,
Query\Parameter,
Table\Name,
Row,
};
$insert = Insert::into(
Name::of('users'),
Row::of([
'username' => 'some username',
'name' => 'some name',
]),
);
$connection($insert);
If you need to specify the type of the values you want to insert you can do like this:
use Formal\AccessLayer\{
Query\Insert,
Query\Parameter,
Query\Parameter\Type,
Table\Name,
Table\Column,
Row,
};
$insert = Insert::into(
Name::of('users'),
Row::new(
Row\Value::of(
Column\Name::of('username'),
'some username',
Type::string,
),
Row\Value::of(
Column\Name::of('name'),
'some name',
Type::string,
),
),
);
$connection($insert);
Multiple inserts¶
Insert
allows you to insert a single row at a time. This forces you to run multiple queries which can be slow, but allows you to specify different columns for each row inserted.
Instead you can use MultipleInsert
:
use Formal\AccessLayer\{
Query\MultipleInsert,
Table\Name,
Table\Column,
Row,
};
use Innmind\Immutable\Sequence;
$insert = MultipleInsert::into(
Name::of('users'),
Column\Name::of('username'),
Column\Name::of('name'),
);
$connection($insert(Sequence::of(
Row::of([
'username' => 'john',
'name' => 'John Doe',
]),
Row::of([
'username' => 'jane',
'name' => 'Jane Doe',
]),
)));
Each Row
must specify the same amount of columns and in the same order, otherwise it will fail.
Select insert¶
Insert
allows you to insert multiple values at once coming from another table via a Select
query.
use Formal\AccessLayer\{
Query\Insert,
Query\Select,
Table\Name,
Table\Column,
};
$insert = Insert::into(
Name::of('users'),
Select::from('leads')->columns(
Column\Name::of('username'),
Column\Name::of('name'),
),
);
$connection($insert);
This example copies all leads
as new users
.