2017-04-13 1 views
0

Ich versuche derzeit, verknüpfte Daten mit dem FriendsOfCake/Crud-Plugin zu speichern. Ich kann jedoch nicht herausfinden, wie man eine Relation speichert, die eine Viele-zu-Viele-Assoziation hat. Ich habe den folgenden Code:Crud-Plugin - Speichern von Viele-zu-Viele-Zuordnung

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

Ich habe ein Alb und Benutzertabelle, die durch eine Join-Tabelle genannt UsersAlbums verbunden ist (mit album_id User_id und als zusammengesetztem Primärschlüssel). Wenn ich den Code ausführe, wird das Album korrekt gespeichert, aber die Zuordnung in der UsersAlbums-Tabelle wird nicht gespeichert. Ich führe derzeit zwei Datenbankaufrufe (einen zum Speichern des Albums und einen zum Speichern der Verknüpfung mit dem Benutzer) in einer Transaktion durch, um die Zeilen zu speichern. Wie das ineffizient ist, gibt es jemanden, der einige Vorschläge/Richtungen hat, wie man das mit dem Crud Plugin löst?

Antwort

0

Versuchen Sie, diese 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(); 
    } 
}