2013-12-18 3 views
1

Я разрабатываю веб-платформу в codeigniter (первый раз с CI) для расчета котировок для растущего числа разных продуктов.Вставить объект в поле базы данных MySQL

Проблема, с которой я сталкиваюсь, заключается в том, что каждый из моих продуктов имеет разные наборы 10+ опций, но я хочу сохранить эти данные только в одной таблице в моей базе данных. Ранее я использовал другую таблицу для каждого продукта, позволяя структуре таблицы представлять различные наборы параметров, однако это не очень масштабируемо с нашим растущим ассортиментом.

После некоторых исследований выяснилось, что одно из решений будет использовать функцию «serialize» для хранения всех моих данных сообщения (из формы цитаты) для каждого продукта в одном столбце, а затем unserialize, когда я захочу использовать эти данные. .

Является ли сериализация данных наилучшим подходом и сможет ли кто-нибудь предоставить простой пример, чтобы показать, как обрабатывать вставку из формы отправки/получения данных?

Большое спасибо заранее

EDIT: Searching будет только когда-либо на тип продукта или уникальный идентификатор. Мои мысли заключались в том, чтобы иметь таблицу типа id, product_type, product_options с product_options, содержащей сериализованные данные?

РЕДАКТИРОВАТЬ 2: Принятие EAV похоже на хороший крик. Я использую для запроса и возврата одного объекта результата, который будет передан в представление (например, $query->quote_ref, $query->quote_date). Может ли кто-нибудь указать мне в правильном направлении, как использовать данные отдельной кавычки, когда запрос будет возвращать несколько строк, по одному для каждого атрибута?

+3

ли вы когда-нибудь нужно искать по частям этих данных? – Steve

+1

Кодирование IMO JSON легче читать, чем сериализовать, но, насколько это касается PHP, это не имеет значения. Сохранение в виде сериализованного или JSON-кодированного массива делает невозможным поиск этих столбцов. –

+2

Лучшим решением является нормализация базы данных с использованием подхода EAV, поэтому вы используете новую таблицу product_options, связанную с таблицей продуктов, по идентификатору продукта –

ответ

2

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

Тогда код будет зависеть от вашего DAL, но основным примером может быть:

$productOptions=array($_POST['option1'], $_POST['option2']);//etc will need to validate data 
$databaseMapper->product_type='product type'; 
//your product_options column is suitable sized varchar 
$databaseMapper->product_options=json_encode($productOptions); 
$databaseMapper->save(); 

Чтобы получить:

$databaseMapper->loadById(20); 
//$productOptions is a standard php array 
$productOptions = json_decode($databaseMapper->product_options, true); 

EDIT снова появится в вашем представлении. Это конкретный кодионник (в то время как выше - нет). на основе кода здесь: http://ellislab.com/codeigniter/user-guide/general/views.html

В контроллере:

//code similar to above to retrieve product options data, ideally contained within a model 
$data['productOptions']=$productOptions; 
$this->load->view('content', $data); 

на ваш взгляд:

<ul> 
<?php foreach ($productOptions as $option):?> 

    <li><?php echo $option;?></li> 

<?php endforeach;?> 
</ul> 
+0

Большое спасибо за это, как бы я затем повторить данные в '$ productOptions' в моем файле вида? – BigRob

+0

Пятно на - спасибо пользователю574632! – BigRob

Смежные вопросы