簡體   English   中英

將HABTM記錄保存到數據庫CakePHP

[英]Save a HABTM record to database CakePHP

我正在使用CakePHP 2從事關注者/關注系統。我已經使用users表和user_users表設置了我的數據庫。 users表是包含系統上每個用戶的主表,而user_users表包含關注者的記錄。

然后我有一個UsersController,User模型和Follower模型。

我可以成功輸出一個按鈕,根據當前登錄的用戶是否跟隨他們正在查看的個人資料所屬的用戶,然后根據當前登錄的用戶是否屬於他們,但是我無法理解該怎么做,是創建新的關注關系在表中。 換句話說,我不知道如何在user_users表中創建記錄。

我不確定這個的邏輯應該去哪里,因此我的“跟隨”按鈕應該指向什么。

這可能是一個非常簡單的問題,但我完全難過了。 我曾嘗試向UsersController添加“跟隨”操作,但我無法讓它工作。

任何幫助非常感謝,鄧肯

HATBM不適合這種情況。 食譜

HABTM數據被視為一個完整的集合,每次添加新的數據關聯時,數據庫中的完整關聯行集將被刪除並再次創建,因此您始終需要傳遞整個數據集以進行保存。 有關使用HABTM的替代方法,請參閱hasMany through(連接模型)

出於這個原因,HABTM主要適用於非常“愚蠢”的關系。 我已經在用戶必須選擇多個興趣的情況下使用它 - 他們只獲得一個復選框列表,他們可以點擊多個興趣,並將它們全部保存在一個點擊中。

在您的情況下,使用它自己的模型單獨使用表會更容易。 我稱之為關系或類似的東西。 它將具有id,followed_by_id,following_id以及您可能需要的任何其他字段。

我從一個舊的蛋糕1.3應用程序挖出一些代碼,但它應該幫助你。 您的Relationships模型看起來像這樣:

<?php
class Relationship extends AppModel {
    var $name = 'Relationship';

    var $belongsTo = array(
        'FollowedBy' => array(
            'className' => 'User',
            'foreignKey' => 'followed_by_id'
        ),
        'Following' => array(
            'className' => 'User',
            'foreignKey' => 'following_id'
        )
    );
}
?>

您的用戶模型必須具有以下關系:

var $hasMany = array(
    'Followers' => array(
        'className' => 'Relationship',
        'foreignKey' => 'following_id',
        'dependent'=> true
    ),
    'FollowingUsers' => array(
        'className' => 'Relationship',
        'foreignKey' => 'followed_by_id',
        'dependent'=> true
    ),

);

然后在你的關系控制器中,你會有類似這樣的方法:

function add($following_id = null) {
    $this->Relationship->create();
    $this->Relationship->set('followed_by_id',$this->Auth->User('id'));
    $this->Relationship->set('following_id',$following_id);
    $this->Relationship->save();
    $this->redirect($this->referer());
}

function delete($id = null) {
    $this->Relationship->delete($id);
    $this->redirect($this->referer());
}

請注意,在該代碼中,我正在使用GET請求修改數據庫 - 我真的不應該這樣做(這是幾年前的舊代碼)。 您將要對添加和刪除方法強制執行POST請求,因為它們正在修改數據庫。

但是,這段代碼應該讓你走上正軌。

暫無
暫無

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

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