cakePHP 2.0查找(“线程”)问题

ttisahbt  于 2022-11-11  发布在  PHP
关注(0)|答案(4)|浏览(151)

我正在我的作业控制器中运行以下命令。

$this->set('jobs', $this->Job->find('threaded', array('conditions' => array('Job.id' => 20))));

现在,在我的视图中,我在foreach循环中显示$jobs很好,但我的问题是我使用字段parent_id将子项链接到Job.id。我知道链接工作正常,因为我可以看到数组中的子项。

Array
(
[0] => Array
    (
        [Job] => Array
            (
                [id] => 20
                [parent_id] => 0
                [rght] => 2
                [lft] => 1
                [client_id] => tasd
                [contact] => asdf
                [email] => sdf
                [address] => 
                [lat] => 
                [long] => 
                [user_id] => 1
                [request_type_id] => Electrical
                [date_start] => 0000-00-00 00:00:00
                [date_end] => 0000-00-00 00:00:00
                [date_complete] => 0000-00-00 00:00:00
                [date_closed] => 0000-00-00 00:00:00
                [status] => completed
                [brief_desc] => aasdf
                [desc] => asdfasdf
                [cost_est] => 3434.00
                [cost_actual] => 
                [created] => 2011-12-18 20:39:24
                    [modified] => 2011-12-18 20:39:24
            )

        [Children] => Array
            (
                [0] => Array
                    (
                        [id] => 21
                        [parent_id] => 20

我想在父作业下显示子作业。嵌套注解应该如何工作。任何帮助都是很好的。

nkhmeac6

nkhmeac61#

查看find('threaded')生成的SQL。您请求的是ID为20的所有作业(而不是作为作业20的子作业的所有作业)
既然你有一个左和右字段,我假设你有附加的树行为。这意味着你可以使用children()

$this->Job->id = 20;
$this->Job->children();

如果你需要一个嵌套的数组,那么就在find('threaded')调用中使用lft和rght列。

$parentJob = $this->Job->find('first', array(
    'conditions' => array(
        'Job.id' => 20
    )
);

$children = $this->Job->find('first', array(
    'conditions' => array(
        'Job.lft BETWEEN ? AND ?' => array($parentJob['Job']['lft'], $parentJob['Job'])['rght']
    )
);

当然,你可以把它归结为一个查询,但我会把它留给“读者作为练习”(我应该是一个教科书作者)

6pp0gazn

6pp0gazn2#

如果任何人想在cakephp视图中显示find('threaded ')结果,他们可以使用以下代码:
控制器代码:
$params = array('recursive' => -1,'fields' => 'Category.id, Category.name, Category.parent_id'); $categories = $this->Category->find('threaded',$params);
并在如下视图中显示线程化结果:

foreach($categories as $category):
        $category_name = $category['Category']['name'];
        foreach($category['children'] as $children):
              $sub_category = $children['Category']['name'];
        endforeach;
endforeach;

我不知道这是正确的方式来显示结果或没有,但它的工作很好。希望它的帮助有人:)我是新的cakephp和学习的基础知识。如果发现任何错误,请原谅我。

chhqkbe1

chhqkbe14#

我知道这是旧的,但我今天试图弄清楚这一点,并能够使它的工作(有点奇怪)与以下:

$this->set('jobs', 
    $this->Job->find('threaded', array(
        'conditions' => array(
            'OR' => array(
                Job.id' => 20,
                Job.parent_id => 20
            )
         )
    )
);

希望这能为某人节省一些时间...

相关问题