I'm using CakePHP 2.6.7.
A user will be able to add to his profile multiple cars and multiple addresses. He will also be able to link multiple addresses to one car, and link one address to multiple cars.
I then have a User model with :
class User extends AppModel {
public $hasMany = array(
'Car',
'Address'
);
}
A Car model with :
class Car extends AppModel {
public $belongsTo = array(
'User'
);
public $hasAndBelongsToMany = array(
'Address' =>
array(
'unique' => 'keepExisting'
)
);
}
An an Address model :
class Address extends AppModel {
public $hasAndBelongsToMany = array(
'Car' =>
array(
'unique' => 'keepExisting',
),
);
public $belongsTo = array(
'User'
);
}
I have a form so that the user can edit his cars (only one for the moment) :
[...]
<legend>Mes voitures</legend>
<?php
for($nbrvoiture = 0; $nbrvoiture <= 0; $nbrvoiture++)
{
?><h3>Voiture <?php echo $nbrvoiture+1?></h3><?php
$myLabelOptions = array('text' => "Marque");
echo $this->Form->input('Car.'.$nbrvoiture.'.CarMake', array('label' => array_merge($mainLabelOptions, $myLabelOptions)));
$myLabelOptions = array('text' => "Modèle");
echo $this->Form->input('Car.'.$nbrvoiture.'.CarModel', array('label' => array_merge($mainLabelOptions, $myLabelOptions)));
$myLabelOptions = array('text' => "Plaque d'immatriculation");
echo $this->Form->input('Car.'.$nbrvoiture.'.NumberPlate', array('label' => array_merge($mainLabelOptions, $myLabelOptions)));
echo $this->Form->submit("Valider", array(
'class' => 'btn btn-default col-sm-offset-2'
));
}
The thing is that I can't save the data to my database. Here is part of the User controller code :
function edit() {
// On récupère l'ID de l'utilisateur
$user_id = $this->Auth->user('id');
// Si l'utilisateur n'a pas d'ID => il n'est pas connecté => il ne peut pas éditer son profil
if(!$user_id){
$this->redirect('/');
die();
}
debug($this->User->find('all'));
$this->User->id = $user_id;
$passError = false;
if($this->request->is('put') || $this->request->is('post')){
$d = $this->request->data;
$d['User']['id'] = $user_id;
debug($d);
if($this->request['pass'][0]=='cars')
{
if($this->User->saveAssociated($d, array('deep' => true))){
$this->Session->setFlash(__("Les informations sur la voiture ont bien été modifiées"), 'alert', array (
'plugin' => 'BoostCake',
'class' => 'alert-success'
));
}else{
$this->Session->setFlash(__("Impossible de modifier ou d'ajouter les infos"), 'alert', array (
'plugin' => 'BoostCake',
'class' => 'alert-danger'
));
}
}
When I save the data, it shows the error.
In my database I have these 4 tables :
Users(id, username, mail, password, created, lastlogin, active, firstname, lastname, gender, birthdate, phonenumber)
Cars(id, CarMake, CarModel, NumberPlate, user_id)
Addresses(id, address, city, state, postcode, country, user_id)
Addresses_cars(address_id, car_id)
This is an example of what I can get from the form (the $d variable) :
array(
'Car' => array(
(int) 0 => array(
'CarMake' => 'Allard',
'CarModel' => '2005',
'NumberPlate' => '56QDS1'
)
),
'User' => array(
'id' => '1'
)
)
I don't understand why it doesn't work... Can you help me please ?
Thank you ! :)
EDIT : I also tried with SaveAll but I can't get it to work.. what's wrong?
It's already been solved by OP, but for future CakePHPers, if you have a save()
or saveAll()
that isn't saving (checked by your if:else
block), the most common problem is a validation error.
CakePHP 2.x Data Validation
CakePHP 3.x Data Validation
If that's not it, try looking at any behaviors you're using, and check for anywhere that should be returning true and isn't (like in it's `beforeSave() method).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With