Ok i'll try.
i'll let you know
Thank you very much
Il giorno giovedì 22 gennaio 2015 15:30:51 UTC+1, José Lorenzo ha scritto:
>
> Associations are already loaded, as you define them in the initialize()
> method of the table.
>
> You can inspect the associations tree in a query by calling
> $query->eagerLoader()->normalized($query->repository());
>
> On Thursday, January 22, 2015 at 2:47:35 PM UTC+1, Ernesto wrote:
>>
>> The "inspect the contain tree" way sounds better.
>>
>> i'll try to explain:
>>
>> With your method you will end up loading every belongsTo and hasOne
>> association, even if not used.
>> The table i'm using right now has 3 belongsTo relationships but i need to
>> show only one
>>
>> On the second hand: first level association are not always enough.
>> This worsen the problem quite a bit.
>> if i use your method i must recursively loop throug tables and theyr
>> relationships, loading a ton of useless classes.
>>
>> What do you think?
>>
>> Il giorno giovedì 22 gennaio 2015 12:56:19 UTC+1, José Lorenzo ha scritto:
>>>
>>> The associations used in a find are represented in a Tree-like
>>> structure. I guess in your case it will be more than enough getting the
>>> first-level associations
>>> of type belongsTo and hasOne, as those are the only types that can be
>>> represented in a html table (they are in the same level of nesting)
>>>
>>> So to get associations of a table of type belongsTo and hasOne:
>>>
>>> $firstLevelAssociations =
>>> collection($mainTable->associations()->type('HasOne'))
>>> ->append($mainTable->associations()->type('BelongsTo'));
>>>
>>> $schemas = [];
>>> foreach ($firstLevelAssociations as $association) {
>>> $schemas[$association->property()] = $association->schema();
>>> }
>>>
>>> At the end of the loop you will have an array of property names pointing
>>> to the table schema. So, finally:
>>>
>>> foreach ($schemas as $property => $schema) {
>>> if ($singleResultFromQuery->has($property)) {
>>> // Do stuff with the schema
>>> }
>>> }
>>>
>>>
>>> This is one way to do it. The other way is inspecting the query object
>>> to get the 'contain' tree. Let me know if you need to know more about it :)
>>> On Thursday, January 22, 2015 at 11:01:35 AM UTC+1, Ernesto wrote:
>>>>
>>>> what about getting all the associations used in a record set?
>>>>
>>>> Il giorno giovedì 22 gennaio 2015 10:02:02 UTC+1, José Lorenzo ha
>>>> scritto:
>>>>
>>>>> foreach ($results as $result) {
>>>>> $source = $result->source();
>>>>> $sourceSchema = TableRegistry::get($source)->schema();
>>>>> }
>>>>>
>>>>> Usually all records in a result set are of the same table, so you on;y
>>>>> need to do that for the first result.
>>>>>
>>>>> If you have associations, then you can get the property in the result:
>>>>>
>>>>> $associationSource = $result->association_property->source();
>>>>>
>>>>>
>>>>> On Thursday, January 22, 2015 at 9:07:31 AM UTC+1, Ernesto wrote:
>>>>>>
>>>>>> Hi all
>>>>>>
>>>>>> i'm migrating an HtmlTableHelper from a Cake 2.x project to new 3.0
>>>>>> one
>>>>>>
>>>>>> The main function of this helper scans the array of data passed as
>>>>>> argument and uses ClassRegistry to obtain schemas for each Model.field.
>>>>>> Later on these informations are used to format the TDs (text fields
>>>>>> justified to the left, number fields justified to the right and so on).
>>>>>>
>>>>>> in 3.0 data arrays are gone, replaced by resultsets.
>>>>>>
>>>>>> I tried to rewrite a similar approach but i'm struggling with Cake's
>>>>>> new ORM
>>>>>>
>>>>>> what's the best way to get source table and schema of each field in a
>>>>>> recordset?
>>>>>>
>>>>>> Thank you very much
>>>>>>
>>>>>>
>>>>>>
--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP
---
You received this message because you are subscribed to the Google Groups
"CakePHP" 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/cake-php.
For more options, visit https://groups.google.com/d/optout.