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 cake-php+unsubscr...@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

Reply via email to