Database\Selection: Remove \ArrayAccess implementation?
- Svaťa Šimara
- Member | 98
Hi,
in my opinion \ArrayAccess implementation complicates using Selection. Especially this code:
src/Database/Table/Selection.php:504–509
foreach ($result->getPdoStatement() as $key => $row) {
$row = $this->createRow($result->normalizeRow($row));
$primary = $row->getSignature(FALSE);
$usedPrimary = $usedPrimary && $primary;
$this->rows[$primary ?: $key] = $row;
}
When primary key wasn't selected in ->select(), everything is ok.
$this->rows[$key]
is applied and $key
is normal
counter.
When primary key was selected in ->select(), everythis is also ok.
$this->rows[$primary]
is applied and $primary
is a
correct value.
But when you are selecting from table book
, and both tables
author
and book
has primary key id
, that
is normal for me. And you select books in this way:
$books = $context->table('book')->select('book.title, author.*');
What will happen? Selection will think that primary key was selected –
id
, but it is an author.id
, not a
book.id
. And what will do $this->rows[$primary]
when one author has more books? $primary
equals
author.id
, so every author will have only one book in the final
selection (or any if didn't write a book).
This is not what do I expect :-)
Solution: remove \ArrayAccess implementation, and simplify code to:
foreach ($result->getPdoStatement() as $row) {
$this->rows[] = $this->createRow($result->normalizeRow($row));
}
Related problem: https://github.com/…se/issues/13#…