簡體   English   中英

CakePHP模型“成員”未與模型“成員”關聯

[英]CakePHP Model “Member” is not associated with model “Member”

我正在用CakePHP創建一個PHP論壇。我很難獲得所有成員的數組,然后在視圖中回顯它們,這是我的代碼。

<?php
App::uses('AppModel', 'Model');

class Member extends AppModel {

    public $validate = array(
        'username' => array(
            'notEmpty' => array(
                'rule' => array('notEmpty')
            ),
        ),
        'password' => array(
            'notEmpty' => array(
                'rule' => array('notEmpty')
            ),
        ),
        'email' => array(
            'email' => array(
                'rule' => array('email')
            ),
        ),
    );

    public $hasMany = array(
        'Post' => array(
            'className' => 'Post',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        ),
        'Topic' => array(
            'className' => 'Topic',
            'foreignKey' => 'user_id',
            'dependent' => false,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'exclusive' => '',
            'finderQuery' => '',
            'counterQuery' => ''
        )
    );
}

那是我的成員模型,這是我的MembersController

<?php
App::uses('Controller', 'AppController');

class MembersController extends AppController {

    public $components = array('Paginator');

    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('profile','login');
    }

    public function index(){
        $this->Paginator->settings['contain'] = array('Member');
        $this->set('members', $this->Paginator->paginate());
    }

    public function profile($id=null) {}

    public function login() {
        if($this->request->is('post')) {
            if ($this->Auth->login()) {
                $this->redirect($this->Auth->redirect());
            } else {
                $this->Session->setFlash(__('Invalid username or password'));
            }
        }
    }

    public function logout() {
        $this->redirect($this->Auth->logout());
    }
}

這是我的索引視圖

<div class="row">
    <?php foreach ($members as $member): ?>
        <?php echo $user[name]; ?>
    <?php endforeach; ?>
</div>

當我訪問example.com/members時,出現一個錯誤,提示模型“ Member”未與模型“ Member”相關聯[CORE / Cake / Model / Behavior / ContainableBehavior.php,第342行]

在您問我使AppModels actas成為可容納對象之前

class AppModel extends Model {
    public $actsAs = array('Containable');
}

刪除該行:

$this->Paginator->settings['contain'] = array('Member');

您正在通過使用它來導致自聯接,但尚未在成員模型中定義該聯接,並且您不希望如此。

這也是錯誤的,而且您的php有語法錯誤-名稱中缺少'。

<?php foreach ($members as $member): ?>
        <?php echo $user[name]; ?>
    <?php endforeach; ?>

它應該是:

<?php foreach ($members as $member): ?>
        <?php echo $member['Member']['name']; ?>
    <?php endforeach; ?>

您在基本知識方面苦苦掙扎,建議您做博客教程,或者至少閱讀有關如何將數據傳遞到視圖以及模型關聯如何工作的信息。 您可以在書中找到所有內容

您的問題在這里:

public function index(){
    $this->Paginator->settings['contain'] = array('Member');
    $this->set('members', $this->Paginator->paginate());
}

由於從成員控制器中調用了分頁,因此默認情況下它將嘗試對成員進行分頁。 您的包含設置指示成員數據也應包含關聯的模型,也稱為成員。 您與其成員之間沒有關聯,因此會出現錯誤。 我將假設包含設置是一個錯誤,因此只需刪除$this->Paginator->settings['contain'] = array('Member');

$this->Paginator->settings['contain'] = array('Member'); 是你的問題。 由於該設置將作為對Member模型的find()調用的選項進行傳遞,因此您實際上是在要求Member包含自身。 'contain'設置為array()以防止獲取任何關聯的記錄。

盡管推薦的方法是在AppModel中將屬性$recursive設置為-1 ,以便默認情況下不會獲取任何關聯的記錄。 然后,Containable用於根據需要獲取關聯的記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM