Comments (9)
yes .. this is a "feature" .. allowing you to cast to other types. however it gets really messy as anyone calling find afterwards will get the casted version. so its a potentially very dangerous feature that we might need to get rid of or limit to subclasses.
from phpcr-odm.
limiting to cast to subclasses sounds ok (we currently already do the oposite, if the stored class is a subclass of the one passed in, the result is of the subclass).
we might add some hint or something to allow the unchecked cast, but then again it seems quite an esoteric use case to me. maybe people should then just ask for the raw phpcr node and map themselves.
from phpcr-odm.
@lsmith77 do we want to change this for 1.1? what approach should we chose? limit to subclasses? which direction makes sense?
- same class => trivial
- stored class is a parent of the $class parameter => use $class?
- stored class is a subclass of the $class parameter => use the subclass? or the $class?
- everything else would throw an exceptoin
from phpcr-odm.
I am +1 for returning the original class or a class with the original class in its "classparents" attribute. I am almost 100% sure that this is what the ORM does.
e.g.
$content = $dm->find('Cms\Content', '/cms/content/article-content'); //returns Cms\ArticleContent for example
https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/UnitOfWork.php#L2949
from phpcr-odm.
with original class you mean the one passed as $class argument, right?
so for 2. what would happen? in your example, it would be find('Cms\ArticleContent', '/cms/content')
and there is a Cms\Content at that path.
from phpcr-odm.
I would expect it to return null
I think
from phpcr-odm.
so if the class stored and the class requested do not match, you expect null to be returned?
from phpcr-odm.
the null feels weird to me too. the only comparable situation in orm would be table inheritance.
say i have class Abstract
and class A extends Abstract
and class B extends Abstract
. when i do $em->find('A', 42)
but 42 is of class B, what does the orm do? (i guess i should do find('Abstract', 42)
usually, but say i expect to really find A. will the orm return me B(42) or null or throw an exception? @beberlei or @Ocramius would you happen to know this?
from phpcr-odm.
trying to get some input on this with a tweet. would love to clean it up for 1.1 as its a potential BC break. but one we really need to do as the current state is weird.
from phpcr-odm.
Related Issues (20)
- Proxy awake on requesting node name
- Binding string with apostrophe using QueryBuilder->literal() crash query HOT 3
- PHP 7 compability issue HOT 4
- How to query @PHPCR\ReferenceMany on Document of same class HOT 2
- Master broken in rebuild HOT 8
- Having problem with 2 ODM managers HOT 1
- GenericDocument.php HOT 1
- Cannot remove nodes with autogenerated @Nodename HOT 1
- translator="attribute" in MetaData is NULL HOT 3
- QueryBuilder: Is it possible to order by id? HOT 3
- Results are not sorted with query builder HOT 4
- QueryBuilder throws InvalidQueryException if node path contains '-<num>e' HOT 1
- Children class Docs vs. Schema defintion HOT 1
- Inheritance for lifecycle callbacks HOT 11
- Array Equality Checking for reordering in UnitOfWork HOT 5
- Classes with names int, string, float, bool... are forbidden in PHP7 HOT 3
- [BUG?] QueryBuilder::setParameter does not exist, so it's not possible to add them during query building HOT 1
- about create indexes HOT 3
- ObjectManager::find requires class name HOT 1
- Symfony 7 HOT 1
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 phpcr-odm.