我试图在cakePHP beforeSave()期间添加相关数据但看起来像cakePHP忽略它.
<?php
App::uses("AppModel", "Model");
class Recipe extends AppModel {
public $hasMany = array('Ingredient');
public function beforeSave($options=array()) {
if(!isset($this->data["Ingredient"])) {
Debugger::log("data[Ingredient] didn't exist! adding some ingredients...");
$this->data["Ingredient"] = array(
array(
'Ingredient' => array(
'name' => 'Gluten Free Flour',
'amount' => '12 cups'
)
),
array(
'Ingredient' => array(
'name' => 'Sugar',
'amount' => '50 cups'
)
),
array(
'Ingredient' => array(
'name' => 'A shoe',
'amount' => 'Just one'
)
),
);
}
Debugger::log("Saving Data: ");
Debugger::log($this->data, 7, 10);
return …Run Code Online (Sandbox Code Playgroud) 我想知道在 MySQL 数据库中存储非关系元数据的最佳方式是什么?不会查询数据,因此不需要对数据应用索引。
这是我尝试的第一个例子,理论上看起来不错,但事实证明我使用的 ORM 很难解析成有用的结构:
CREATE TABLE test (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255)
);
CREATE TABLE test_metadata (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
test_id INT(11),
name VARCHAR(255),
value TEXT,
FOREIGN KEY (test_id)
REFERENCES test(id),
UNIQUE KEY `uk_test_id_name` (test_id, name)
);
Run Code Online (Sandbox Code Playgroud)
完整示例: http: //sqlfiddle.com/#!2/9d84f1
然后我正在考虑尝试的另一个解决方案是将元数据作为 JSON 存储在架构中的另一列中,如下所示:
CREATE TABLE test2 (
id INT(11) PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(255),
metadata TEXT
);
Run Code Online (Sandbox Code Playgroud)
不过,这样做可能有很多缺点,从我的角度来看,我认为更新元数据在SELECT调用之前需要额外的操作UPDATE
以下哪种解决方案最适合将元数据存储在关系数据库中?还是有更好的方法我没有看到?