【问题标题】:Alternative for Recursive in CakePHP 3.6.xCakePHP 3.6.x 中递归的替代方案
【发布时间】:2018-12-02 12:54:19
【问题描述】:

在 CakePHP 2.x 中有递归设置,根据设置,它的查询会深入 X 层...

我看了下面的问题,但他们没有回答我的问题...

CakePHP 3 Fetch associated data recursive

Recursive in 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'
]);

还有下面的find语句

$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
)

我的问题是,如何获取要填充的“回复”数组项的“回复”属性?即:如何在回复中填充回复的第二和第三等级别?

【问题讨论】:

    标签: php cakephp cakephp-3.0 cakephp-3.6


    【解决方案1】:

    您必须明确说明您现在想要包含的内容。要获得三个级别的回复,这应该可以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多