【问题标题】:In cakephp how can I do a find with conditions on a related field?在 cakephp 中,如何查找相关字段的条件?
【发布时间】:2016-07-15 21:09:39
【问题描述】:

我有一个模型(Listings),它拥有并属于几个不同的模型,我想找到所有这个模型,它的相关模型(Openhouses)有一个条件。 “拥有和属于”在模型文件中设置。 Listings有很多Openhouses,Openhouses属于Listings。 (并且列表有很多我想要数据的其他模型。)

我一直在努力。

$this->Listing->find('all', 
array('conditions' => 
array('Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s'))
));

但无济于事。

Error: 1054: Unknown column 'Openhouse.date' in 'where clause

我知道我可以在 Openhouse 模型上搜索并获取相关的列表,但随后数据以不同的格式返回,我需要将递归方式调高以从我的其他模型中获取数据。 (我最终得到了重复的开放式数据!)。如果需要,我可以发布更多代码示例。

我的问题基本上是我是否只需要查询 openhouse 模型并接受它,还是我在相关模型上设置条件的语法不正确?

【问题讨论】:

  • 这对我来说真的很有用,但也可以按 Openhouse.date 字段排序。当我在我的示例中尝试与此示例相同时,它没有任何意义。我调试了查询和排序字段,并且连接在单独的查询中。 $this->List->find('all', array('contain' => array('Openhouse.conditions' => array('Openhouse.date >' => $openhouse_start->format('Y-m-d H:i :s'), 'Openhouse.date $openhouse_end->format('Y-m-d H:i:s')) ), 'Openhouse.order' => 数组('Openhouse.date DESC' ) )

标签: php cakephp


【解决方案1】:

如果您有很多链接模型,递归到 2 的设置可能会带来比您想要的更多的数据。

如果是这样,mavarro 所说的还有一个替代方案,您也可以尝试使用Containable behaviour

$this->Listing->find
(
    'all', 
    array
    (
        'conditions' => array
        (
            'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
            'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s')
        ),
        'contain' => array('Openhouse')
    )
);

【讨论】:

    【解决方案2】:

    试试这个:

    $this->List->find('all', array(
        'contain' => array(
            'Openhouse.conditions' => array(
                'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
                'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s'))
            )
        )
    )
    

    【讨论】:

    • 像魅力一样工作谢谢! (抱歉这个周末我生病了,但我终于回来工作了)
    • 可以在这个例子中指定顶级模型(List)的条件吗?我可以在 find('all', array(
    【解决方案3】:

    尝试添加一个 $this-&gt;Listing-&gt;recursive = 2; 在调用之前找到所有。 应该在调用之前链接表格,让您可以从 Listing 模型访问 Openhouse 模型。

    【讨论】:

      【解决方案4】:
      $this->List->find('all', array(
          'contain' => array(
              'conditions' => array(
                  'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'),
                  'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s')
                                   ),
              'order' => array('Openhouse.date DESC')
                            )
                                   )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多