Phalcon hasManyToMany หยุดเพิ่มความสัมพันธ์กับฐานข้อมูล

ก่อนอื่นฉันได้สร้าง 3 โมเดลและ 3 ตารางที่มีความสัมพันธ์ hasMany ใน 2 รายการ ได้แก่ ผู้ใช้และกลุ่ม UserGroup เป็นของผู้ใช้และกลุ่ม

class User extends \Phalcon\Mvc\Model {

public $id;
public $name;

public function initialize()
{
    $this->hasMany(
        'id',
        'UserGroup',
        'user_id',
        array(
        'foreignKey' => array(
            'action' => Relation::ACTION_CASCADE
        )
    ));
}

กลุ่ม:

use Phalcon\Mvc\Model\Validator\PresenceOf;

class Group extends \Phalcon\Mvc\Model {

public $id;
public $name;

public function initialize()
{
    $this->hasMany('id', 'UserGroup', 'group_id', array(
        "foreignKey" => array(
            "message" => "Группа не может быть удалена, потому что её используют некоторые пользователи"
        )
    ));
}

กลุ่มผู้ใช้:

<?php
class UserGroup extends \Phalcon\Mvc\Model {

public $id;
public $group_id;
public $user_id;

public function initialize()
{
    $this->belongsTo("user_id", "User", "id", array(
        "foreignKey" => true
    ));

    $this->belongsTo("group_id", "Group", "id", array(
        "foreignKey" => array(
            "message" => "Выбранная группа для пользователя не существует!"
        )
    ));
}
}

เมื่อฉันสร้างผู้ใช้ใหม่ ทุกอย่างได้ผล:

public function createAction()
{
    $this->checkPost();

    // Get user name
    $userName = $this->request->getPost('name');
    $userGroups = $this->request->getPost('groups');

    if ($this->checkExisting($userName)) {
        $this->returnJson('error', 'Такой пользователь уже существует!');
        return;
    }

    // Create user
    $user = new User();

    $user->name = $userName;
    $success = $user->create();

    if ($success) {

        // Add user groups
        $userGroupModels = array();
        $userGroupCount = 0;
        if (!empty($userGroups)) {
            foreach($userGroups as $groupId) {
                $userGroupModels[ $userGroupCount ] = new UserGroup();
                $userGroupModels[ $userGroupCount ]->user_id = $user->id;
                $userGroupModels[ $userGroupCount ]->group_id = $groupId;

                $userGroupCount++;
            }

            $user->userGroup = $userGroupModels;
            $user->save();
        }

        $this->returnJson('success', 'Пользователь добавлен!');
        return;
    } else {
        $this->returnJson('error', 'Ошибка добавления пользователя!');
        return;
    }
}

แต่เมื่อฉันเปลี่ยนความสัมพันธ์ของ User เป็น n-n:

$this->hasManyToMany(
        'id',
        'UserGroup',
        'user_id', 'group_id',
        'Group',
        'id',
        array(
        'foreignKey' => array(
            'action' => Relation::ACTION_CASCADE
        )
    ));

มันหยุดทำงาน ไม่มีข้อผิดพลาด เพิ่มผู้ใช้แล้ว ความสัมพันธ์ - ไม่ใช่

ช่วย!


person deb0rian    schedule 24.03.2014    source แหล่งที่มา


คำตอบ (1)


ความสัมพันธ์หลายรายการจำเป็นต้องมีตารางอื่นเพื่อรวมเข้าด้วยกัน ในกรณีของคุณนี่คือ UserGroup ตารางนั้นไม่มีการกำหนดความสัมพันธ์ใดๆ ไว้ แต่เป็นเพียงตัวช่วยสำหรับอีกสองคนเท่านั้น

ดังที่กล่าวไว้ คุณต้องไม่ใช้เป็นของ To ใน UserGroup เนื่องจากจะเป็นการประกาศความสัมพันธ์แบบหลายต่อหนึ่ง

person colburton    schedule 11.06.2014