2014-03-24 10 views
0

因此,首先我已經建立了3個模型和3個表,hasMany關係在其中兩個:User和Group。 UserGroup是belongsTo用戶和組。Phalcon hasManyToMany停止添加關係到數據庫

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

但是,當我改變的關係用戶nn:

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

它停止工作。沒有錯誤。用戶被添加,關係 - 不是。

幫助!

回答

2

多對多的關係需要另一個表來將它們粘合在一起。在你的情況下,這是UserGroup。該表沒有定義任何關係,它只是另外兩個的幫手。

這就是說,你不能在UserGroup中使用belongsTo,因爲這會聲明一個多對一的關係。