CakePHP - Relação entre tabelas

Boa noite, estou com dificuldade no em CakePHP 3 e o problema é o seguinte:

Cannot insert row, some of the primary key values are missing. Got (, ), expecting (idstorie, users_iduser)

  • O sistema deve adicionar uma “Storie” ao BD, nisso ela deve gerar automaticamente o seu ID (Auto_Implement) e pegar o ID do usuário que está logado.

TEMPLATE/STORIES/ADD

<nav class="large-3 medium-4 columns" id="actions-sidebar">
    <ul class="side-nav">
        <li class="heading"><?= __('Actions') ?></li>
        <li><?= $this->Html->link(__('List Stories'), ['action' => 'index']) ?></li>
    </ul>
</nav>
<div class="stories form large-9 medium-8 columns content">
    <?= $this->Form->create($story) ?>
    <fieldset>
        <legend><?= __('Add Story') ?></legend>
        <?php
            echo $this->Form->input('title');
            echo $this->Form->input('content');
            echo $this->Form->input('users_iduser',['value'=>$authUser['iduser'],'type'=>'hidden']); //essa linha pega o usuário da sessão que carrega ao logar.
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end() ?>
</div>

CONTROLLER/STORIESCONTROLLER

public function add()
    {
        $story = $this->Stories->newEntity();
        if ($this->request->is('post')) {
            $this->Stories->patchEntity($story, $this->request->data);
            if ($this->Stories->save($story)) {
                $this->Flash->success(__('The story has been saved.'));
                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error(__('The story could not be saved. Please, try again.'));
            }
        }
        $this->set(compact('story'));
        $this->set('_serialize', ['story']);
    }

TABLE/STORIESTABLE

namespace App\Model\Table;

use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

class StoriesTable extends Table
{

    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('stories');
        $this->displayField('title');
        $this->primaryKey(['idstorie', 'users_iduser']);

        $this->addBehavior('Timestamp');
    }

    public function validationDefault(Validator $validator)
    {
        $validator
            ->integer('idstorie')
            ->allowEmpty('idstorie', 'create');

        $validator
            ->requirePresence('title', 'create')
            ->notEmpty('title');

        $validator
            ->requirePresence('content', 'create')
            ->notEmpty('content');

        $validator
            ->integer('users_iduser')
            ->allowEmpty('users_iduser', 'create');

        return $validator;
    }
}

ENTITY/STORY

namespace App\Model\Entity;

use Cake\ORM\Entity;

class Story extends Entity
{

    public $belongsTo = array('User'); 

    protected $_accessible = [
        '*' => true,
        'idstorie' => false,
        'users_iduser' => false
    ];
}

Desde já agradeço.

1 curtida

[RESOLVIDO] - Refiz todo o banco de dados do zero.

O erro era: Cannot insert row, some of the primary key values are missing. Got (, ), expecting (idstorie, users_iduser)

O problema se dava pois eu gerei o banco de dados com o MySQL Workbench baseado no meu projeto, e as configurações estavam conflitando com o BAKE(gerador de código do CakePHP).

  • Dica para quem estiver começando com CAKE:

Faça tudo na mão, não dependa de ferramentas, assim você saberá exatamente onde está o erro, e não passará pelo mesmo problema que eu. Perdi quase 2 dias com este erro.

1 curtida