Hello Sérgio,

I think that you are fundamentally solving the wrong problem here: mixing
the domains of persistence and ACL/RBAC.

Make your business rules explicit and enforced by object API internals,
rather than pushing this sort of logic down the ORM.

Marco Pivetta

http://twitter.com/Ocramius

http://ocramius.github.com/

On 17 June 2015 at 00:21, Sérgio Amorim <[email protected]> wrote:

> Hi.
>
> Quite a few posts out there asking how you can disable lazy loading, but
> most of all turn in a direction to use the the hydration mode array.
> Unfortunatly, this doesn't enable me to use the generated entity classes
> that I already defined for doctrine and doesn't allow a proper interface to
> be set
>
> Details:
>
> Assume that I defined the entities
>
> namespace Foo\Entity;
> class Qux {
>    protected $extraData;
>    public getExtraData() { ...}
>    public setExtraData($extraData) { ...}
> }
>
> class Bar {
>
>    protected $quxs;
>    public addQux(Qux $qux) { ... }
>    public removeQux(Qux $qux) { ... }
>    public getQuxs() { ... }
> }
>
>
>
>
> Lets say that depending on the context (for instance, for security
> reasons) the service layer decides to call either call database layer that
> has two methods NoDetails or Complete.
>
> /**
>  * @returns Bar[]
>  **/
> public fetchBar($context) {
>    if($this->security->hasFullAccess($context))
>       return $this->dbal->getBarComplete();
>    else
>       return $this->dbal->getBarNoDetails();
> }
>
> which are implemented as followed:
>
> /**
>  * @returns Bar[]
>  **/
> public getBarNoDetails() {
>    $entityManager->createNativeQuery("Select b from Foo:Bar b")->
> getResults();
> }
>
> /**
>  * @returns Bar[]
>  **/
> public getBarComplete() {
>    $entityManager->createNativeQuery("Select b,q from Foo:Bar b join
> b.Qux q")
> ->getResults();
> }
>
>
>
>
> Now, since I've set to use lazy loading I'm not really creating a
> difference to the poing of view of the caller, since, in both scenarios he
> can still do
>
> $bars[0]->getQuxs()
>
> the only difference would be that it would take longer to respond because
> of the lazy loading.
>
> But, if I use
>
>  ...->getArrayResults();
>
> I manage to sucessfully restrict the access to the Qux collection, but now
> the interface is broken, because I'm not returning a set of
> Foo\Entity\Bar[] but instead an array. And cannot longer to $bars[0]->
> getQuxs() and I must use instead $bars[0]->quxs.
>
> Thoughts?
>
> Thx
>
> --
> You received this message because you are subscribed to the Google Groups
> "doctrine-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/doctrine-user.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to