2017-04-13 41 views
0

我正在尝试使用FriendsOfCake/crud插件保存关联的数据。但是,我似乎无法弄清楚如何保存一个关系以建立多对多关联。我有以下代码:Crud插件 - 保存多对多关联

$this->Crud->action()->saveOptions(['atomic' => false]); 
$this->Crud->listener('relatedModels')->relatedModels(true); 
$this->Crud->on('beforeSave', function(\Cake\Event\Event $event){ 
    $event->subject->entity->Users = [ 
     ['user_id' => $this->userId] 
    ]; 
}); 

我具有通过一个连接表称为UsersAlbums连接(与album_id和USER_ID作为复合主键)的相册和用户表。当我执行代码时,专辑将被正确存储,但UsersAlbums表中的关联不会被保存。我目前正在执行两个数据库调用(一个用于保存相册,另一个用于保存与用户的关联)以保存行。由于这是效率低下,有没有人有一些建议/方向如何通过使用crud插件来解决这个问题?

回答

0

试试这个8)

namespace App\Controller; 

use App\Controller\AppController; 
use Cake\Event\Event; 

class AlbumsController extends AppController 
{ 
    public function initialize() 
    { 
     parent::initialize(); 
     $this->viewBuilder()->className('CrudView\View\CrudView'); 
     $this->loadComponent('Crud.Crud', [ 
      'actions' => [ 
       'Crud.Index', 
       'Crud.View', 
       'Crud.Add', 
       'Crud.Edit', 
       'Crud.Delete', 
      ], 
      'listeners' => [ 
       'CrudView.View', 
       'Crud.RelatedModels', 
       'Crud.Redirect', 
      ], 
     ]); 
     $this->Crud->action()->config('scaffold.tables_blacklist', [ 
      'phinxlog', 
      'sessions', 
      'users_albums', 
     ]); 
    } 

    public function beforeFilter(Event $event) 
    { 
     parent::beforeFilter($event); 
     $this->Auth->allow([ 
      'index', 
      'view', 
     ]); 
    } 

    public function add() 
    { 
     $action = $this->Crud->action(); 
     $action->config('scaffold.fields', [ 
      'title', 
      'description', 
     ]); 
     $action->config('scaffold.relations', ['Users']); 
     $this->Crud->on('beforeSave', function ($event) { 
      $event->getSubject()->entity->user_id = $this->Auth->user('id'); 
     }); 
     return $this->Crud->execute(); 
    } 
}