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.