首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cakephp Containable未附加到模型

Cakephp Containable未附加到模型
EN

Stack Overflow用户
提问于 2012-02-27 06:39:34
回答 2查看 1.6K关注 0票数 1

我已经使用过很多次了,但是我终生都不明白为什么它现在不能正常工作。

我有3个模型项目,用户和国家。

Project belongsTo User belongsTo国家/地区

这是模型

代码语言:javascript
复制
<?php
class User extends AppModel {
    var $name = 'User';
    var $displayField = 'username';
    var $belongsTo = array(
        'AccountType' => array(
            'className' => 'AccountType',
            'foreignKey' => 'account_type_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'PaymentType' => array(
            'className' => 'PaymentType',
            'foreignKey' => 'payment_type_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Country' => array(
            'className' => 'Country',
            'foreignKey' => 'country_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'InstantMessenger' => array(
            'className' => 'InstantMessenger',
            'foreignKey' => 'instant_messenger_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'TimeZone' => array(
            'className' => 'TimeZone',
            'foreignKey' => 'time_zone_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
        'Language' => array(
            'className' => 'Language',
            'foreignKey' => 'language_id',
            'conditions' => '',
            'fields' => '',
            'order' => ''
        ),
    );
}


<?php
class Project extends AppModel {
    var $name = 'Project';
    var $displayField = 'project_title';

    var $belongsTo = array(
            'User' => array(
                    'className' => 'User',
                    'conditions' => '',
                    'fields' => '',
                    'order' => ''
            ),
            'ProjectType' => array(
                    'className' => 'ProjectType',
                    'foreignKey' => 'project_type_id',
                    'conditions' => '',
                    'fields' => '',
                    'order' => ''
            ),
            'BiddingType' => array(
                    'className' => 'BiddingType',
                    'foreignKey' => 'bidding_type_id',
                    'conditions' => '',
                    'fields' => '',
                    'order' => ''
            ),
            'ProjectStatus' => array(
                    'className' => 'ProjectStatus',
                    'foreignKey' => 'project_status',
                    'conditions' => '',
                    'fields' => '',
                    'order' => ''
            ),
            'EmploymentType',
            'PaymentType',
    );
}



<?php
class Country extends AppModel {
    var $name = 'Country';
    var $displayField = 'name';
    //The Associations below have been created with all possible keys, those that are not needed can be removed

    var $hasMany = array(
        'User' => array(
            'className' => 'User',
            'foreignKey' => 'country_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );

}

现在,下面是我尝试将一个可容纳对象附加到项目并添加用户的代码

代码语言:javascript
复制
function smartbid($projid = null)
{
    $this->loadModel('Content');
    $content = $this->Content->findById(53);
    $this->set('content',$content);
    $this->Project->Behaviors->attach('Containable');
    $options = array(
       array(
        'conditions'=>
           array(
                'Project.id'=>$projid
            ),
           'contain'=>array(
               'User'
           )
        ) 
     );
    $project = $this->Project->find('first',$options);

    $this->set(compact('project'));
}

现在cakephp完全忽略了我附加的containable并返回这个

代码语言:javascript
复制
Array
(
    [Project] => Array
        (
            [id] => 1
            [user_id] => 19
            [status] => 1
            [approval_status] => 0
            [project_status] => 2
            [approval_date] => 2012-02-08
            [project_title] => Database Reporting
            [project_type_id] => 3
            [budget] => 100
            [bidding_type_id] => 1
            [employment_type_id] => 
            [esl] => 1
            [secrecy] => 0
            [secrecy_file] => 
            [description] => this is my first post
            [performance] => 0
            [cme] => 6
            [files_share] => 
            [project_deadline] => 1
            [delivery_deadline] => 2012-02-16
            [bidding_deadline] => 2012-02-27
            [legal] => 1)Employer requires complete and fully-functional working program(s) in executable form as well as complete source code of all work done.

2) Deliverables must be in ready-to-run condition as follows (depending on the nature of the project and deliverables):

2a) If there are any server-side deliverables (intended to only exist in one place in the Employer's environment) then they must be installed by the Consultant in ready-to-run condition (unless specified elsewhere by the Employer).

2b) All other software (including but not limited to any desktop software or software the Employer intends to distribute) must include a software installation package that will install the software in ready-to-run condition on the platform(s) specified in this project (unless specified elsewhere by the Employer).

3) All deliverables will be considered 'work made for hire' under U.S. Copyright law. Employer will receive exclusive and complete copyrights to all work purchased.

3b) No part of the deliverable may contain any copyright restricted 3rd party components (including GPL, GNU, Copyleft, etc.) unless all copyright ramifications are explained AND AGREED TO by the Employer on the site per the Consultant's Worker Legal Agreement.
            [close] => 0
            [agree] => 1
            [created] => 2012-02-06
            [top_employer] => 0
            [view_counter] => 41
            [pause_deadline] => 
            [payment_type_id] => 
            [status_date] => 2012-02-08
            [redeem_amount] => 
        )

    [User] => Array
        (
            [id] => 19
            [username] => EmployerWarrior
            [password] => 7c6a180b36896a0a8c02787eeafb0e4c
            [account_type_id] => 2
            [picture] => 
            [resume] => 
            [alert] => 0
            [first_name] => Yaser
            [last_name] => Ibrahim
            [company_name] => Software Momentum, Inc.
            [company_incorporated] => 1
            [email] => Yaser43082@hotmail.com
            [address] => 123 Somewhere
            [apartment_number] => 
            [city] => Some City
            [state] => Some State
            [country_id] => 1
            [phone_city] => 614
            [phone_country] => 1
            [phone_number] => 1234567
            [fax_city] => 
            [fax_country] => 
            [fax_number] => 
            [instant_messenger_id] => 1
            [im_username] => 
            [postal] => 43082
            [time_zone_id] => 58
            [language_id] => 23
            [esl] => 1
            [us_resident] => 1
            [ssnum] => 1234567
            [have_ssnum] => 1
            [work_permit_number] => 
            [alien_number] => 
            [work_permit] => 0
            [green_card] => 0
            [payment_type_id] => 4
            [ip] => 
            [created] => 2012-02-06 08:59:35
            [top_employer] => 0
            [top_consultant] => 0
            [rating] => 0
            [money_invested] => 0
            [money_earned] => 0
            [total_projects] => 0
            [last_project] => 0
            [active] => 0
            [last_login] => 
            [last_seen] => 2012-02-26 14:13:08
            [is_logged_in] => 0
            [time_format_id] => 1
            [paypal_id] => 
            [momentum_expiration] => 2014-02-12
        )

    [ProjectType] => Array
        (
            [id] => 3
            [name] => Small Business Project
            [min] => 100
            [max] => 499.99
            [order] => 4
        )

    [BiddingType] => Array
        (
            [id] => 1
            [type] => Public Bidding
            [percentage] => 15
        )

    [ProjectStatus] => Array
        (
            [id] => 2
            [status] => Open Bids
            [icon] => bid_open.png
            [order] => 3
            [default] => 1
        )

    [EmploymentType] => Array
        (
            [id] => 
            [name] => 
        )

    [PaymentType] => Array
        (
            [id] => 
            [type] => 
        )

    [BidWinner] => Array
        (
            [id] => 
            [comment_group_id] => 
            [bid_status_id] => 
            [project_id] => 
            [bid_amount] => 
            [performance_guaranteed] => 
            [isSmartBid] => 
            [user_id] => 
            [comment] => 
            [isWinner] => 
            [created] => 
        )

    [HRWWallet] => Array
        (
            [id] => 1
            [user_id] => 19
            [account_type_id] => 
            [entity_id] => 1
            [payment_type_id] => 1
            [entity_type_id] => 1
            [payment_to_id] => 
            [payment_status_id] => 2
            [payment_number] => 
            [service_id] => 4
            [created] => 2012-02-10 18:45:52
            [description] => Payment for project
            [credit] => 100
            [debit] => 0
            [billing_address] => 
            [billing_city] => 
            [billing_state] => 
            [billing_country_id] => 
            [billing_name] => 
            [exp_year] => 
            [exp_month] => 
            [security_code] => 
        )

    [EmployerRating] => Array
        (
            [id] => 
            [owner_id] => 
            [project_id] => 
            [rated_by_id] => 
            [account_type_id] => 
            [rating] => 
            [comment] => 
            [created] => 
        )

    [ConsultantRating] => Array
        (
            [id] => 
            [owner_id] => 
            [project_id] => 
            [rated_by_id] => 
            [account_type_id] => 
            [rating] => 
            [comment] => 
            [created] => 
        )

    [Arbitration] => Array
        (
            [id] => 5
            [project_id] => 1
            [defendent_id] => 20
            [plantiff_id] => 19
            [magistrate_id] => 17
            [arbitration_status_id] => 1
            [verdict] => 
            [created] => 2012-02-11 23:00:00
            [end] => 
        )

    [Bid] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [comment_group_id] => 1
                    [bid_status_id] => 1
                    [project_id] => 1
                    [bid_amount] => 75
                    [performance_guaranteed] => 10
                    [isSmartBid] => 0
                    [user_id] => 20
                    [comment] => Hi, I was writing about your project
                    [isWinner] => 
                    [created] => 2012-02-08 14:15:04
                )

            [1] => Array
                (
                    [id] => 2
                    [comment_group_id] => 2
                    [bid_status_id] => 1
                    [project_id] => 1
                    [bid_amount] => 100
                    [performance_guaranteed] => 25
                    [isSmartBid] => 0
                    [user_id] => 18
                    [comment] => I can do this work
                    [isWinner] => 
                    [created] => 2012-02-08 14:16:39
                )

            [2] => Array
                (
                    [id] => 5
                    [comment_group_id] => 2
                    [bid_status_id] => 1
                    [project_id] => 1
                    [bid_amount] => 45
                    [performance_guaranteed] => 10
                    [isSmartBid] => 1
                    [user_id] => 18
                    [comment] => This is a smart bid bid
                    [isWinner] => 0
                    [created] => 2012-02-25 15:40:54
                )

        )

    [PaymentTransaction] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [user_id] => 19
                    [account_type_id] => 
                    [entity_id] => 1
                    [payment_type_id] => 1
                    [entity_type_id] => 1
                    [payment_to_id] => 
                    [payment_status_id] => 2
                    [payment_number] => 
                    [service_id] => 4
                    [created] => 2012-02-10 18:45:52
                    [description] => Payment for project
                    [credit] => 100
                    [debit] => 0
                    [billing_address] => 
                    [billing_city] => 
                    [billing_state] => 
                    [billing_country_id] => 
                    [billing_name] => 
                    [exp_year] => 
                    [exp_month] => 
                    [security_code] => 
                )

        )

    [WorkAcceptanceLog] => Array
        (
        )

    [Comment] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [comment_group_id] => 1
                    [project_id] => 1
                    [to_id] => 19
                    [from_id] => 20
                    [cc_id] => 
                    [isArbitration] => 
                    [no_contest] => 
                    [subject] => Re:
                    [comment] => Hi, I was writing about your project
                    [created] => 2012-02-08 14:15:04
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 
                )

            [1] => Array
                (
                    [id] => 2
                    [comment_group_id] => 2
                    [project_id] => 1
                    [to_id] => 19
                    [from_id] => 18
                    [cc_id] => 
                    [isArbitration] => 
                    [no_contest] => 
                    [subject] => Re:
                    [comment] => I can do this work
                    [created] => 2012-02-08 14:16:39
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 
                )

            [2] => Array
                (
                    [id] => 3
                    [comment_group_id] => 2
                    [project_id] => 1
                    [to_id] => 18
                    [from_id] => 19
                    [cc_id] => 
                    [isArbitration] => 
                    [no_contest] => 
                    [subject] => Broadcasted Message
                    [comment] => This is a broadcast to all consultants in regards to the project.
                    [created] => 2012-02-08 14:18:52
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 2012-02-08 14:18:51
                )

            [3] => Array
                (
                    [id] => 4
                    [comment_group_id] => 1
                    [project_id] => 1
                    [to_id] => 20
                    [from_id] => 19
                    [cc_id] => 
                    [isArbitration] => 
                    [no_contest] => 
                    [subject] => Broadcasted Message
                    [comment] => This is a broadcast to all consultants in regards to the project.
                    [created] => 2012-02-08 14:18:52
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 2012-02-08 14:18:52
                )

            [4] => Array
                (
                    [id] => 7
                    [comment_group_id] => 0
                    [project_id] => 1
                    [to_id] => 19
                    [from_id] => 27
                    [cc_id] => 20
                    [isArbitration] => 1
                    [no_contest] => 
                    [subject] => Arbitration
                    [comment] => What seems to be the issue ?
                    [created] => 2012-02-12 18:28:11
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 
                )

            [5] => Array
                (
                    [id] => 8
                    [comment_group_id] => 5
                    [project_id] => 1
                    [to_id] => 17
                    [from_id] => 19
                    [cc_id] => 20
                    [isArbitration] => 1
                    [no_contest] => 
                    [subject] => Arbitration
                    [comment] => Well I would like to say I am not happy
                    [created] => 2012-02-12 19:35:51
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 
                )

            [6] => Array
                (
                    [id] => 9
                    [comment_group_id] => 6
                    [project_id] => 1
                    [to_id] => 17
                    [from_id] => 19
                    [cc_id] => 20
                    [isArbitration] => 1
                    [no_contest] => 
                    [subject] => Arbitration
                    [comment] => I would like to make a complaint
                    [created] => 2012-02-12 22:07:08
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 
                )

            [7] => Array
                (
                    [id] => 10
                    [comment_group_id] => 2
                    [project_id] => 1
                    [to_id] => 19
                    [from_id] => 18
                    [cc_id] => 
                    [isArbitration] => 
                    [no_contest] => 
                    [subject] => Re:Broadcasted Message
                    [comment] => This is a smart bid bid
                    [created] => 2012-02-25 15:40:54
                    [file_name] => 
                    [parent_id] => 
                    [last_message] => 
                )

        )

)

如你所见,它忽略了我的附件。我做错了什么。

EN

回答 2

Stack Overflow用户

发布于 2013-03-01 10:24:10

这是一个相当古老的问题,但它的价值是什么。

Here是可包含行为的文档。它指出,要动态加载行为,您应该使用:

代码语言:javascript
复制
$this->Model->Behaviors->load('Containable');

我认为差异仅仅是由于attachdetach已经被弃用的事实。

另外,为什么不在模型中甚至在AppModel中设置$actAs属性

代码语言:javascript
复制
class AppModel extends Model {
    public $actAs = array('Containable');
    // public $recursive = 0;
    //...
}

Project模型中定义的User模型的关系缺少foreignKey字段,这可能会导致问题。我假设Cake默认为user_id,它当然应该是projects表中的列名。

除此之外,您对contain选项的使用似乎还可以。

票数 1
EN

Stack Overflow用户

发布于 2012-02-28 09:24:55

试试这个:

代码语言:javascript
复制
$this->Project->Behaviors->attach('Containable');
$this->Project->contain(array(
            'conditions' => array('Project.id' => $projid),
            'User'));
$project = $this->Project->find('first');
$this->Project->Behaviors->detach('Containable');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9457946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档