当前位置: 首页 > 知识库问答 >
问题:

在cakephp协会中只得到有孩子的父母

张鸿志
2023-03-14

我设置了简单的关联,比如,一个作者有很多书,一本书属于一个作者。我的文件如下。

<?php
class Author extends AppModel
{
   var $name = 'Author';
   var $hasMany = 'Book';
}
?>

<?php
class Book extends AppModel
{   var $name = 'Book';
    var $belongsTo = 'Author';
}
?>


<?php
class AuthorsController extends AppController {
   var $name = 'Authors';

   public function index(){
   $authors=$this->Author->find('all');
   pr($authors);die;
 }

}
?>

当我写公关(作者);它打印authors表的所有数据。

Array
(
    [0] => Array
        (
            [Author] => Array
                (
                    [id] => 1
                    [name] => Jack
                    [email] => test@test.com
                    [website] => www.Jack.com
                )

            [Book] => Array
                (
                    [0] => Array
                        (
                            [id] => 1
                            [isbn] => a12sdsdsd
                            [title] => Book One
                            [description] => Description One
                            [author_id] => 1
                        )

                    [1] => Array
                        (
                            [id] => 2
                            [isbn] => fgg234234
                            [title] => Book Two
                            [description] => Description Two
                            [author_id] => 1
                        )

                )

        )

    [1] => Array
        (
            [Author] => Array
                (
                    [id] => 2
                    [name] => Ron
                    [email] => demo@demo.com
                    [website] => www.Ron.com
                )

            [Book] => Array
                (
                )

        )

)

正如你所见,id:2的作者(罗恩)没有书。所以Book数组是空的。我想要的是只获取那些拥有任何书籍的作者(这里只返回author Jack数据)。如何实现这一点?我在以下网站上阅读了关于可包含行为的内容:

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

但没有这样的选择来实现这一点。任何帮助都将不胜感激。

提前谢谢!

共有2个答案

孟跃
2023-03-14

实现一个计数器缓存,这样你就可以得到作者表中的书籍数量,然后你可以简单地通过这个条件(模型代码)找到:

array($this->alias . '.book_count > 0');

计数器缓存消除了在SQL(慢速)中进行子选择的需要,这将对缓慢且不准确的结果进行计数或过滤。

章博耘
2023-03-14

我有一个类似的问题,这是我解决它的方式,它很脏,但我在CakePHP1.3中找不到更好的解决方案

你也可以试着这样做-

//Inside model
        $authors = $this->find( 'all', array(
        'fields' => $fields,
        'conditions' => $conditions,
        'order' => 'id asc',
        'contain'=>array(
            'Book' => array(
                'conditions'=> $bookConditions,
                ),
            )
        )
    );

    //We don't want the results without books
    foreach($authors as $index => $author){
        if( ( !$author['Book'] ) ){
            unset($authors[$index]);
        }
    }

    return $authors;
 类似资料:
  • 问题内容: 最初,我一直在尝试获取父母的名单以及每个父母的一个最近的孩子。我已经知道如何使用以下查询 但是问题是,结果不包括没有孩子的父母。添加也无济于事。所以我想我可以对所有没有孩子的父母进行查询,然后将这两个查询合并为一个查询。但是我在建立这样的查询时遇到了麻烦。将不胜感激任何建议。 问题答案: 这是您的查询:

  • 我一直在将代码从JIT转换到D3,并使用树布局。我已从中复制了代码http://mbostock.github.com/d3/talk/20111018/tree.html使用我的树数据,但我想做更多。 在我的例子中,我想创建子节点,这些子节点合并回一个较低级别的父节点,我意识到这更像是一个有向图结构,但是希望树能够适应这一点(即注意子节点之间的公共id应该合并)。 因此,基本上,一棵树在从父母到

  • 问题内容: 我不断收到错误: “路由器”可能只有一个子元素 使用react-router时。 我似乎无法弄清楚为什么它不起作用,因为它与示例中显示的代码完全一样:快速入门 这是我的代码: 感谢您的帮助 问题答案: 您必须将您的换行到(或)中。 应该 jsfiddle / webpackbin

  • 问题内容: 我在 MySQL中* 有如下的 注释 表: * 用户可以添加 新的 注释,因为它们不是其他注释的子对象,所以将没有parent_id。用户还可以 回复 通过先前方法添加的评论,因此它们是主要评论的子级,例如在第二层级上。该 PARENT_ID 列表示父评论的ID,如果存在的话。如果注释没有父母,则默认 parent_id 为-1。 话虽如此,我想查询表中的所有注释,每个父项后跟其子级,

  • 实现一对多关系并选择父项和子项我有一个关系,我想进行查询(选择*) 文件夹。JAVA 作者。JAVA 我的请求: 我得到了这样的结果: 我的代码有什么问题?什么是问题,当我执行查询我得到了这个结果...我想得到这个结果

  • d3.js树形布局是一个很棒的工具,但是它默认只允许孩子有一个单亲。我希望能够让孩子们有不止一个父母。我对树的默认行为提供的节点位置很满意。我想要的只是在默认树被计算出来之后,在没有孩子的父母和现有的孩子之间画出额外的对角线链接。我的脚本目前看起来像这样: 我试图使用根对象将父节点的子节点复制到无子节点,但无济于事(根对象的结构对我来说非常晦涩难懂)。 感谢任何帮助。 PS :我知道一个类似的问题