Я новичок в cakePHP и довольно новичок в PHP. Я просмотрел несколько видео на Youtube, чтобы помочь мне создать базовый сайт с CRUD-страницами для всего.Я сейчас пытаюсь настроить страницу регистрации пользователей, чтобы добавить кучу вещей в таблицу HABTM, но не могу понять, что происходит не так.
$this->User->create();
if ($this->User->save($this->data)) {
$lvl = $this->data['User']['level'];
$charids = $this->Kanji->find('list',array('conditions'=>array('grade' <= $lvl,'grade' >= 0)));
foreach ($charids as $charid){
$characterList = array('kanji_id'=>$charid,'user_id'=>$this->User->id, 'level'=>2);
$this->kanjisUsers->save($characterList);
Немного разъяснений, Сайт предназначен для школыПроект, я хочу, чтобы это помогло с изучением японского языка, и идея в том, что вы можете поместить строку текста на японском языке, и это упростит ее до вашего уровня, поэтому, когда вы зарегистрируетесь, вы скажете ему, каков ваш уровень японского языка (целое число между 1и 9) затем он пройдет по списку символов (таблица кандзи) и найдет все с числом, равным или меньшим вашего уровня (называемого «класс» в таблице кандзи), затем я хочу добавить все это в таблицу kanjis_usersс int 2, чтобы указать, что он известен (тогда я сделаю это снова с символами повышения на один уровень и сохраню их с int 1 для «изучения»). Я помог с кодом и не уверен, как все это работает, я былменяет многое и не может понять, что не так, есть предложения?
примечание: я также увидел, что модель называлась kanjis_user.php иKanjisUser, я читал, что модель не должна быть во множественном числе, но когда я пытался изменить ее, все зависало, может ли это быть частью проблемы?Я также попытался изменить => с помощью -> и наоборот, а также создал $ characterList, чтобы удалить его из функции сохранения, не знаю, повлияло ли это на что-нибудь, так как оно никогда не работало ...
Редактировать в ответкомментарий от api55:
Вот отношение модели Для kanjis_users:
class KanjisUser extends AppModel {
var $name = 'KanjisUser';
//Validation stuff here
var $belongsTo = array(
'Kanji' => array(
'className' => 'Kanji',
'foreignKey' => 'kanji_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
Здесь режим кандзи:
var $hasAndBelongsToMany = array(
'User' => array(
'className' => 'User',
'joinTable' => 'kanjis_users',
'foreignKey' => 'kanji_id',
'associationForeignKey' => 'user_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
Вот модель пользователя:
var $hasAndBelongsToMany = array(
'Kanji' => array(
'className' => 'Kanji',
'joinTable' => 'kanjis_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'kanji_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
),
Это просто стандартная сгенерированная модель (за вычетом проверки).
Для уточнения ошибки нет ошибки, она просто не работает, она спасает пользователя, ноне добавляйте ничего в таблицу kanjis_users.Вот весь контроллер регистра в том виде, как он есть сейчас:
function register() {
if (!empty($this->data)) {
$this->User->create();
if ($this->User->save($this->data)) {
$lvl = $this->data['User']['level'];
//$test = $this->Kanji->find ('list',array('Kanji.grade <='<=$lvl, 'AND'=>array('Kanji.grade >=' >= 1)));
$charids = $this->Kanji->find('list',array('conditions'=>array('grade <=' => $lvl,'grade >=' >= 1)));
//print_r($charids);
//exit();
//$this->kanjisUsers->save(array('kanji_id'=>$charids,'user_id'=>$this->User->id));
//$this->kanjisUsers->saveALL(array('kanji_id'=>$charids,'user_id'=>$this->User->id));
foreach ($charids as $charid){
//echo("<p>Charid: ".$charid." is: </p>");
//var_dump($charid);
$this->kanjisUsers->save(array('kanji_id'=>$charid,'user_id'=>$this->User->id),'level'=> 2);
}
//exit();
$this->Session->setFlash(__('The user has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The user could not be saved. Please, try again.', true));
}
}
}
Кажется, что оба генерируют похожий массив, но, тем не менее, я изменяю код, иногда он дает сбой, иногда спасает пользователя, но никогдасделать что-нибудь с таблицей kanjis_users.
Что я хочу: (упрощено для ясности:
Таблица пользователей содержит: имя, имя пользователя, pw, ID пользователя и т. д. ... Таблица kanjis содержит: китайский символдля каждой строки с идентификатором, английским, оценкой (int от 0 до 9) и т. д ... kanjis_users имеет: ID, идентификатор_пользователя, kanji_id, созданный (дата), измененный (дата), уровень (int).
IКогда пользователь регистрируется, пользователь должен задать уровень, а затем, когда пользователь будет создан, он заполнит таблицу kanjis_users всеми строками таблицы кандзи, которые имеют «класс» между 1 и уровнем, который пользователь поставил при регистрации.форма (называемая 'level').
Итак, что я пытаюсь сделать выше, это после того, как пользователь сохранен (этот пользователь create () вверху), я затем проверяю, было ли сохранение успешным, а затемполучить уровень, указанный пользователем в формеи попробуйте получить все символы из строк таблицы кандзи, где уровень равен или меньше этого (заметьте, я не хочу получать символы с 0, поскольку они самые сложные ...) и добавить ихвсе к таблице kanjis_users.(это только для регистрации, при использовании системы пользователь может добавлять и удалять символы по своему желанию)
Я заметил с print_r, что он получает все 12000 ~ строк из таблицы кандзи, поэтому я думаю,фильтр не работал ...
Надеюсь, это имеет смысл, пожалуйста, дайте мне знать, если мне понадобится дополнительная информация.