Альтернативы для хранения массива с CakePHP + MySQL - PullRequest
0 голосов
/ 20 июня 2011

Я разрабатываю веб-сайт, на котором пользователи смогут сохранять в своем профиле список (массив) элементов (которые они также могут найти на том же веб-сайте и имеют свой собственный идентификатор).

Так я использовал до сих пор в подобных ситуациях: - Создайте текстовое (текстовое) поле в таблице пользователей в БД и сохраните элементы, разделенные запятыми. - Чтобы прочитать это поле, используйте метод explode , чтобы получить массив в CakePHP, а затем работать с ним - Чтобы сохранить массив в БД, используйте метод implode , чтобы преобразовать его в строку и сохранить в поле

Что мне не нравится в этом методе, так это то, что он может действительно усложнить работу с этими списками (добавлять элементы, удалять элементы ...), и вы не можете получить к ним доступ напрямую, всегда есть некоторая предварительная обработка или постобработка, чтобы сделать.

Например, чтобы упростить просмотр определенного элемента в списке одного пользователя и найти других пользователей с таким же элементом в своих списках.

Есть ли лучший способ работы с массивами в CakePHP + MySQL? Я читал о serialize () / unserialize () , но я не думаю, что это будет иметь большое значение по сравнению с другим методом ...

Большое спасибо заранее за любые идеи!

Ответы [ 2 ]

1 голос
/ 20 июня 2011

Определенно используйте таблицу, так как по предложению Кристиана Антонсена создайте таблицу элементов, затем создайте отношение hasManu в вашей модели пользователя, например:

class User extends AppModel{
    $hasMany = array(
         'Item'
    );
}

Или отношения HABTM:

class User extends AppModel{
    $hasAndBelongsToMany = array(
         'Item'
    );
}

Используйте помощник по форме для создания входных данных для элементов.

Надеюсь, это поможет.

0 голосов
/ 20 июня 2011

Таблица базы данных - это просто огромная электронная таблица. Но вместо того, чтобы хранить один фрагмент информации в каждой ячейке, вы объединяете их все вместе в одну ячейку. Вы никогда не сделаете этого в электронной таблице.

Вы должны создать таблицу предметов следующим образом:

+----+--------+--------+
| ID | UserID | ItemID |
+----+--------+--------+
| 1  | 2      | 3      |
| 2  | 2      | 1      |
| 3  | 3      | 3      |
+----+--------+--------+

И, возможно, другой стол:

+----+-------------+
| ID | ItemName    |
+----+-------------+
| 1  | Mathematics |
| 2  | Jogging     |
| 3  | Movies      |
+----+-------------+

Это даст вам понять, что Пользователю 2 нравятся фильмы и математика, а Пользователю 3 нравятся фильмы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...