Phalcon hasManyToMany berhenti menambahkan hubungan ke database

Jadi pertama-tama saya telah membuat 3 model dan 3 tabel dengan hubungan hasMany di 2 diantaranya: Pengguna dan Grup. UserGroup adalah milik Pengguna dan Grup.

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
        )
    ));
}

Kelompok:

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" => "Группа не может быть удалена, потому что её используют некоторые пользователи"
        )
    ));
}

Grup pengguna:

<?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" => "Выбранная группа для пользователя не существует!"
        )
    ));
}
}

Lalu, ketika saya membuat pengguna baru, semuanya berfungsi:

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;
    }
}

Tetapi ketika saya mengubah hubungan Pengguna menjadi nn:

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

Itu berhenti bekerja. Tidak ada kesalahan. Pengguna ditambahkan, relasi - tidak.

Membantu!


person deb0rian    schedule 24.03.2014    source sumber


Jawaban (1)


Hubungan banyak ke banyak membutuhkan meja lain untuk merekatkannya. Dalam kasus Anda, ini adalah UserGroup. Tabel tersebut tidak memiliki hubungan apa pun yang ditentukan, ini hanya pembantu untuk dua tabel lainnya.

Meskipun demikian, Anda tidak boleh menggunakan milikTo di UserGroup, karena ini akan mendeklarasikan hubungan banyak-ke-satu.

person colburton    schedule 11.06.2014