标签: containable

在CakePHP中添加条件到Containable

以前我依靠递归,但我没有得到一些解决方案,然后我发现Containable适用于这些.

我正在开发一个电影评论网站.在那里,我需要显示与特定类型相关的电影列表.

我有以下代码:

//example
$genre = "drama";

$options = array(
    'contain' => array(
        'Movie',
        'MoveiGenre.Genre' => array(
            'conditions' => array('MovieGenre.Genre.name = "'.$genre.'"')
        ),
        'MovieGenre.Genre.name'
    ),
    'recursive' => 2,
    'limit' => 10
);
$this->paginate = $options;
$this->set('movies',$this->paginate());
Run Code Online (Sandbox Code Playgroud)

真正的问题从这里开始,我得到所有的电影,即使它与流派"戏剧"无关.我哪里错了?

让我解释一下数据库表:

表:电影

 ----------------------------
 | id | title | description |
 ----------------------------
 | 1  | mov1  | something1  |
 | 2  | mov2  | something2  |
 | 3  | mov3  | something3  |
 ----------------------------
Run Code Online (Sandbox Code Playgroud)

表:流派

 ---------------
 | id | name   |
 ---------------
 | 1 …
Run Code Online (Sandbox Code Playgroud)

recursion cakephp conditional-statements containable cakephp-2.0

6
推荐指数
1
解决办法
1万
查看次数

CakePHP - 是否可以使用read()方法使用Containable行为?

我是CakePHP的新手,无法弄清楚如何使用Containable行为调用模型类的read()方法.我可以用find()执行以下操作

$this->T->find('all', array (
    'contain' => array (
        'C', 
        'L' => array (
            'fields' => array ('L.id, L.time'),
            'I' => array (
                'fields' => array ('I.id','I.time'),
                'J.name',
                'J.id'
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

这正如我预期的那样工作,但我不想得到T的所有实例,而是得到id = $ id的实例,所以我可以将它传递给'view'视图.但传递给find的数组在做的时候不起作用

$this->T->read(
array (
        'contain' => array (
            'C', 
            'L' => array (
                'fields' => array ('L.id, L.time'),
                'I' => array (
                    'fields' => array ('I.id','I.time'),
                    'J.name',
                    'J.id'
                )
            )
        )
, $id)
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

cakephp containable cakephp-1.3

5
推荐指数
1
解决办法
3076
查看次数

如何最小化CakePHP中的"包含"查询?

我有三个模型,用户,评论页面.

用户 有很多 评论,评论 属于 Pages.

所有模型都使用该containable行为,默认为recursive -1.

如果我叫find()上查询留言,与含有包括请求页面模式的领域,这正确返回使用结果的单个查询,自动地加入表给用户.

如果我从User模型(包含 CommentComment.Page)调用类似的查询,则结果是查询来获取注释,然后是每个注释的查询以获取相关页面.

有没有办法配置模型来维持JOIN优化?我假设相关模型(Comments)上的belongsTo声明将跟随主机模型(Users).

UPDATE

我应该澄清,我的问题使用了我的实际案例研究的简化版本.虽然我需要的最小解决方案将包括这个初始Model hasMany Model belongsTo Model结构,但我也在链中的一个或多个其他belongsTo 模型上寻找解决方案(我会自动使用LEFT JOIN,因为这将是可行).

cakephp has-many belongs-to containable

5
推荐指数
1
解决办法
1540
查看次数

何时不在CakePhp 2.x中使用可包含行为

几次将Containable Behavior添加到我的各种模型类之后,我很清楚只需将该行放入AppModel中,从而使每个模型都可以包含.然后让我想知道,是否存在某种特定模型具有可包含行为不可取或适得其反的情况?

containable cakephp-2.0

4
推荐指数
1
解决办法
2389
查看次数

Cakephp - 包含(可包含的行为)取得太多

正如我从cakephp文档中所理解的那样,'containable'-Behavior的一个优点是,如果你需要更少的数据,它可以获取更少的数据......

但在我的用户和用户组之间的连接中,这似乎不起作用.

我的关联看起来像:

    Group
    hasMany: Membership

    User
    hasMany: Membership

    Membership
    belongsTo: User, Group
Run Code Online (Sandbox Code Playgroud)

(我没有使用HABTM,而是使用两者之间的模型'Membership'来加入用户和组).

所有模型都实现了"可包含"行为.

现在我希望获得具有特定ID的组的所有成员,只有他们的ID和邮件地址.我的查询是这样构建的:

    $members = $this->Membership->find('all', array(
        'conditions'    => array(
                'group_id'      => $id
            ),
        'contain'       => array(
            'User'          => array(
                'fields' => array('id', 'fullName')
            ),
        )
    ));
Run Code Online (Sandbox Code Playgroud)

但结果数组看起来像:

array(
    (int) 0 => array(
            'Membership' => array(
            'id' => '1',
            'group_id' => '1',
            'user_id' => '1',
            'role' => 'member'
        ),
        'Group' => array(
            'id' => '1',
            'name' => 'Foo Group'
        ),
        'User' => array(
            'password' => '*****',
            'id' …
Run Code Online (Sandbox Code Playgroud)

php mysql cakephp containable

4
推荐指数
1
解决办法
5012
查看次数

CakePHP包含不与递归一起使用

当我尝试:

// Removed the limit to ensure that all of the group notes items can be found and collapsed
$recent_notes = $this->User->Note->find('all', array(
    'recursive' => 2,
    'order' => 'Note.created DESC',
    'conditions' => $conditions,
    'contains' => array(
        'NotesUser', 'Poster', 'Comment' => array('Poster')
    )
));
Run Code Online (Sandbox Code Playgroud)

它不会限制输出 - 我得到每个相关的模型.但是,当我没有指定recursive2,或者如果我指定为1,我错过了Comment=>Poster模型.

我怎样才能获得我需要的模型?谢谢!

cakephp model containable cakephp-1.2

3
推荐指数
1
解决办法
5446
查看次数

CakePHP可容纳的条件不限制结果?

我正试图在分类列表中找到用户的杂货.关联是Category hasMany Item hasMany User through Grocery.我正在使用可包含行为,并没有过滤掉所有其他Grocery.它基本上返回每个项目.

我的控制器功能:

function showlist() {
$categories = $this->Category->find('all', array(
    'contain' => array(
        'Item' => array(
            'Grocery' => array(
                'conditions' => array(
                    'Grocery.user_id =' => $this->Auth->user('id')
                )
            )
        )
    )
));
Run Code Online (Sandbox Code Playgroud)

返回的数组:

Array
(
    [0] => Array
        (
            [Category] => Array
                (
                    [id] => 10
                    [parent_id] => 
                    [name] => Dairy
                    [lft] => 1
                    [rght] => 6
                )

            [Item] => Array
                (
                )

        )

[1] => Array
    (
        [Category] => Array
            (
                [id] => 11
                [parent_id] …
Run Code Online (Sandbox Code Playgroud)

cakephp containable

3
推荐指数
1
解决办法
2679
查看次数

CakePHP:如果我在find中组合'fields'和'contains',我就得不到想要的结果了.有谁能解释为什么?

我有以下情况:作品有一个Image属于ImageGroup.

如果我这样做:

$works = $this->Work->find('all', array(
    'contain' => array(
        'PreviewImage' => array(
            'fields' => array('PreviewImage.id', 'PreviewImage.filename', 'PreviewImage.alt'),
            'ImageGroup' => array(
                'fields' => array('ImageGroup.id')
            )
        )
    )
));
Run Code Online (Sandbox Code Playgroud)

我会得到这个:

array(
(int) 0 => array(
    'Work' => array(
        'id' => '1',
        'title_us' => 'Work Title',
        'title_de' => 'Arbeit Titel',
        'alias' => 'work-title',
        'pdf_id' => '1',
        'date' => '2013-10-08 10:36:00',
        'title_graphic_us_id' => '1',
        'title_graphic_de_id' => '2',
        'body_us' => 'English Content',
        'body_de' => 'Deutscher Inhalt',
        'preview_image_id' => '3',
        'preview_us' => 'English Preview Text',
        'preview_de' …
Run Code Online (Sandbox Code Playgroud)

php cakephp containable cakephp-2.0

3
推荐指数
1
解决办法
4461
查看次数

使用Containable通过相关模型(HABTM)上的条件过滤分页结果

我需要对Product属于特定Category(HABTM关联)的s 列表进行分页.

在我的Product模型中,我有

var $actsAs = array('Containable');
var $hasAndBelongsToMany = array(
    'Category' => array(
        'joinTable' => 'products_categories'
    )
);
Run Code Online (Sandbox Code Playgroud)

并在 ProductsController

$this->paginate = array(
    'limit' => 20,
    'order' => array('Product.name' => 'ASC'),
    'contain' => array(
        'Category' => array(
            'conditions' => array(
                'Category.id' => 3
            )
        )
    )
);
$this->set('products', $this->paginate());
Run Code Online (Sandbox Code Playgroud)

但是,生成的SQL看起来像这样:

SELECT COUNT(*) AS `count` 
FROM `products` AS `Product` 
WHERE 1 = 1;

SELECT `Product`.`*` 
FROM `products` AS `Product` 
WHERE 1 = 1 
ORDER …
Run Code Online (Sandbox Code Playgroud)

cakephp has-and-belongs-to-many paginate containable cakephp-1.3

2
推荐指数
1
解决办法
6991
查看次数

CakePHP包含的行为无法按预期工作

我正在尝试从2级深度的模型中检索特定字段.我使用容器行为,但没有正确检索底层.

下面是代码:

$this->Review->Behaviors->attach('Containable');
    $latestReviews = $this->Review->find('all', array(
        'contain' => array(
            'Business' => array(
                'fields' => array('Business.name'),
                'BusinessType' => array(
                    'fields' => array('BusinessType.url')
                )
            ),
        ),
        'fields' => array('overall'),
    ));
Run Code Online (Sandbox Code Playgroud)

它返回的数组:

array(
(int) 0 => array(
    'Review' => array(
        'overall' => '2'
    ),
    'Business' => array(
        'name' => 'Business Name',
        'business_type_id' => '1',
        'id' => '2012'
    )
))
Run Code Online (Sandbox Code Playgroud)

但是,不是给我业务类型ID,而是希望它返回BusinessType url字段.

任何人都可以看到我错在哪里?我确定这与CakePHP文档一致.

php cakephp containable

0
推荐指数
1
解决办法
1360
查看次数

cakephp中缺少行为

我需要你的帮助我正在使用localhost中的CakePHP开发一个网站,但当我尝试上传到服务器时我得到这个错误缺少行为

Error: containableBehavior could not be found.

Error: Create the class containableBehavior below in file: 
       app/Model/Behavior/containableBehavior.php
Run Code Online (Sandbox Code Playgroud)
<?php
class containableBehavior extends ModelBehavior {

}
Run Code Online (Sandbox Code Playgroud)

cakephp containable

0
推荐指数
1
解决办法
1309
查看次数