Comments (8)
The same problem for oneToOne relationship.
A track for resolution?
class OneToOne extends DeletableRelationship
{
protected function stitchIntoRecord(
Record $nativeRecord,
array $foreignRecords
) : void {
$nativeRecord->{$this->name} = false;
if ($this->onDelete === static::SET_NULL) {
$nativeRecord->{$this->name} = null;
}
foreach ($foreignRecords as $foreignRecord) {
if ($this->recordsMatch($nativeRecord, $foreignRecord)) {
$nativeRecord->{$this->name} = $foreignRecord;
}
}
}
// ...
}
So if reference column can be null, the value must not be false but null?
from atlas.orm.
/me ponders
Can you tell me a little about the domain object that is being built from the record?
from atlas.orm.
Yes.
For example:
class Author
{
// ...
public function __construct(?int $author_id, ?string $name)
{
$this->author_id = $author_id;
// ...
}
}
class Thread
{
public function __construct(?int $article_id, ?string $title, ?string $content, ?Author $author)
{
$this->article_id = $article_id;
// ...
}
}
And the relationships in DataSource:
class AuthorRelationships extends MapperRelationships
{
protected function define()
{
$this->oneToMany('threads',
Thread::CLASS,
[
'author_id' => 'author_id',
]);
}
}
class ThreadRelationships extends MapperRelationships
{
protected function define()
{
$this->manyToOne('author',
Author::CLASS,
[
'author_id' => 'author_id',
])
->onDeleteSetNull();
}
}
from atlas.orm.
And the problem is that sometimes, when you fetch a ThreadRecord from the data source with('author'), the author field is false because there is no related author row?
from atlas.orm.
Yes is that.
If no author, for anonymous thread (for example), the field is false instead null.
from atlas.orm.
All right, I think I understand now.
Some background: the false
is there to indicate that you tried to fetch a relationship, but there was nothing related (as vs null
which means you never tried to fetch the relationship in the first place).
The most expedient solution I can think of is to modify Atlas Transit to accept both "false" and "null" to mean "null" when the target domain property is an object. Would that work for you here?
from atlas.orm.
Yes of course, that will works for me if it's implemented in Transit.
from atlas.orm.
@ElGigi please examine atlasphp/Atlas.Transit#7 and see if it works for you!
from atlas.orm.
Related Issues (20)
- Cached Queries HOT 8
- The name of the static method 'new' in the Atlas class seems to generate a parse error in third party libraries like phpDocumentor HOT 14
- joinWith doesn't work when specifying direction
- On updates, 1 and true and not being treated as the same for bit/boolean columns and values HOT 1
- Cannot delete all records in a many-to-many HOT 4
- Wrong parameters for PDOException? HOT 1
- Updating Many to Many?
- Postgres: problem when using uuid type field HOT 3
- Question: how to use raw insert values in ORM HOT 3
- Support for read-only MySQL generated columns
- Help: how to use advanced ORM feature HOT 5
- Help: Only the first result in a select includes data from related records HOT 7
- [Help Required] Getting Atlas\Mapper\Exception when trying to fetch a record from SQLite HOT 3
- How to use PHP-DI PSR 11 and Repository HOT 1
- Does Atlas.Orm suffer of the problem of useless order by on some ORM prefetches ?
- Row name for Exception::rowNotMapped() and Exception::rowAlreadyMapped() HOT 1
- orderBy missing HOT 1
- Issue with character encoding HOT 12
- Missing get PDO connection from Atlas ORM HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from atlas.orm.