Cakephp Контейнер не прикрепляется к модели - PullRequest
1 голос
/ 27 февраля 2012

Я использовал многоразовые тонны раз, но не могу понять, почему это не работает сейчас.

У меня есть 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 полностью игнорирует мое прикрепленное содержимое и возвращает это

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 ]

1 голос
/ 01 марта 2013

Это довольно старый вопрос, но для чего он стоит.

Здесь - документация для Контейнерного поведения. В нем говорится, что, чтобы загрузить поведение на лету, вы должны использовать:

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

Я полагаю, что разница заключается просто в том, что attach и detach устарели.

Кроме того, почему бы просто не установить свойство $actAs в вашей модели или даже в AppModel?

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

В связи с моделью User, определенной в модели Project, отсутствует поле foreignKey, что может вызвать проблемы. Я предполагаю, что Cake по умолчанию имеет значение user_id, которое, конечно, должно быть именем столбца в таблице projects.

Кроме этого, использование параметров contain выглядит нормально.

0 голосов
/ 28 февраля 2012

Попробуйте это:

$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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...