Cakephp可以不附加到Model上

时间:2012-02-26 22:39:34

标签: php cakephp

我已经使用了很多次,但我无法理解为什么它现在不能正常工作。

我有3个模型Project,User和Country。

项目所属于用户 用户所属国家

这是模型

<?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' => ''
        )
    );

}

现在,我的代码是尝试将可包含的项目附加到项目并添加用户

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完全忽略了我附加的containsable并返回此

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] => 
                )

        )

你可以看到它忽略了我的依恋。我做错了什么。

2 个答案:

答案 0 :(得分:1)

这是一个相当古老的问题,但它的价值在哪里。

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

$this->Model->Behaviors->load('Containable');

我认为差异仅仅是因为attachdetach已被弃用。

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

class AppModel extends Model {
    public $actAs = array('Containable');
    // public $recursive = 0;
    //...
}

User模型中定义的Project模型的关系缺少foreignKey字段,这可能会造成麻烦。我认为Cake默认为user_id,当然应该是projects表中列的名称。

除此之外,您对contain选项的使用似乎没问题。

答案 1 :(得分:0)

试试这个:

$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');