Итак, у меня есть две модели, Post и Event. Оба «имеют AndBelongToMany» друг с другом.
В файле модели Post.php у меня есть это:
public $hasAndBelongsToMany = array(
"Events"=>array(
"className"=>"Event",
"joinTable"=>"events_posts",
"foreignKey"=>"post_id",
"associationForeignKey"=>"event_id",
"unique"=>true
)
);
В файле модели Event.php у меня есть это:
public $hasAndBelongsToMany = array(
"Posts"=>array(
"className"=>"Post",
"joinTable"=>"events_posts",
"foreignKey"=>"event_id",
"associationForeignKey"=>"post_id",
"unique"=>true
)
);
В моей базе данных есть таблица с именем «events_posts» с двумя полями: post_id, event_id.
Теперь в другом контроллере, где мне нужно сохранять информацию вручную (не через форму), у меня есть этот кусок кода:
$post_data = array(
"Post"=>array(
"image_id"=>$entry['id'],
"image_url"=>$entry['images']['standard_resolution']['url'],
"image_thumb"=>$entry['images']['low_resolution']['url'],
"image_text"=>$entry['caption']['text'],
"status"=>'1',
"created_on"=>$entry['created_time'],
"instagram_user_id"=>$user_id
),
"Event"=>array(
"Event"=>array($event['Event']['id'])
)
);
$result = $this->Post->save($post_data,array('deep' => true));
Он сохраняет новые данные поста, но не сохраняет отношение в таблицу events_posts … Может кто-нибудь сказать мне, что я делаю неправильно? Это сводит меня с ума.
Используйте сингулярное имя модели для ассоциаций. Следовать Соглашения по моделям и базам данных и добавьте следующий код в вашу модель Post.
class Post extends AppModel {
public $hasAndBelongsToMany = array(
"Event");
}
Затем для сохранения данных из контроллера вам нужно только сохранить ($ post_data).
$result = $this->Post->save($post_data);
Протестировано с CakePHP 2.6.0 и CakePHP 2.3.4.
Других решений пока нет …