Альтернатива для рекурсивного в CakePHP 3.6.x - PullRequest
0 голосов
/ 02 декабря 2018

В CakePHP 2.x была рекурсивная настройка, и, в зависимости от настройки, ее запросы доходили бы на X уровней ...

Я посмотрел на следующие вопросы, ноони не ответили на мой вопрос ...

CakePHP 3 Выборка связанных данных рекурсивная

Рекурсивная в cakephp3?


Сейчас я пытаюсь рекурсивно извлечь следующую таблицу

+----+------------+------------+------------+------------------------------------------+
| id | message_id | account_id | to_user_id | message                                  |
+----+------------+------------+------------+------------------------------------------+
|  1 |          0 | 10         |       1617 | asd a sfg sdfhgdfh  gf dgh dfghfdgh      |
|  2 |          1 | 1617       |         10 | afdkjnjdsf ndfs jfsd kjlfdgs kljgfsd jkl |
|  3 |          2 | 10         |       1617 | t5ge6h65h 6e6heh6eh6 he h e              |
|  4 |          3 | 1617       |         10 | kljnnjkl nkl njkln jkln jkl              |
|  5 |          4 | 10         |       1617 | fffffffffffffff                          |
+----+------------+------------+------------+------------------------------------------+

со следующими определениями таблицы

$this->belongsTo('Messages', [
    'foreignKey' => 'message_id',
    'joinType' => 'INNER'
]);
$this->hasMany('Replies', [
    'className' => 'Messages',
    'foreignKey' => 'message_id',
    'propertyName' => 'replies'
]);

И следующим оператором поиска

$message = $this->Messages->find('all', ['contain' => ['Replies']])->where(['Messages.id' => $id])->first();

Это мои результаты

App\Model\Entity\Message Object
(
    [id] => 1
    [account_id] => 10
    [message] => asd a sfg sdfhgdfh  gf dgh dfghfdgh
    [message_id] => 0
    [to_user_id] => 1617
    [replies] => Array
        (
            [0] => App\Model\Entity\Message Object
                (
                    [id] => 2
                    [account_id] => 1617
                    [message] => afdkjnjdsf ndfs jfsd kjlfdgs kljgfsd jkl
                    [message_id] => 1
                    [to_user_id] => 10
                    [[new]] => 
                    [[accessible]] => Array
                        (
                            [account_id] => 1
                            [message] => 1
                            [message_id] => 1
                            [to_user_id] => 1
                            [messages] => 1
                        )

                    [[dirty]] => Array
                        (
                        )

                    [[original]] => Array
                        (
                        )

                    [[virtual]] => Array
                        (
                        )

                    [[errors]] => Array
                        (
                        )

                    [[invalid]] => Array
                        (
                        )

                    [[repository]] => Replies
                )

        )
    [[new]] => 
    [[accessible]] => Array
        (
            [account_id] => 1
            [message] => 1
            [message_id] => 1
            [to_user_id] => 1
            [messages] => 1
        )

    [[dirty]] => Array
        (
        )

    [[original]] => Array
        (
        )

    [[virtual]] => Array
        (
        )

    [[errors]] => Array
        (
        )

    [[invalid]] => Array
        (
        )

    [[repository]] => Messages
)

Мой вопрос: как мне получить свойство "Ответы" для элементов массива "ответы", которые нужно заполнить?т.е. как мне получить второй и третий и т. д. уровни ответов, которые должны быть заполнены в ответах?

1 Ответ

0 голосов
/ 02 декабря 2018

Вы должны четко указать, что именно вы хотите содержать сейчас.Чтобы получить три уровня ответов, это должно сработать:

$message = $this->Messages->find('all', [
    'contain' => ['Replies' => ['Replies' => ['Replies']]]
])->where(['Messages.id' => $id])->first();
...