2017-04-13 8 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] 
    ]; 
}); 

私は(複合主キーとしてalbum_idとUSER_IDと)結合テーブルと呼ばれるUsersAlbums介して接続されているアルバムとユーザーテーブルを持っている:私は、次のコードを持っています。コードを実行すると、アルバムは正しく保存されますが、UsersAlbumsテーブルの関連付けは保存されません。私は現在、行を保存するトランザクションで2つのデータベース呼び出し(アルバムを保存するためのものとユーザーとの関連付けを保存するもの)を実行しています。これは非効率的なので、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(); 
    } 
} 
試してみてください
関連する問題