l_r*_*l_r 10 database joomla components joomla2.5
我正在尝试创建一个使用多个表的组件(前端).我发现1或2个帖子部分回答了这个问题,但没有一个确实如此.对于知道如何做到这一点的人来说,这一点似乎总是很简单明了,但从未真正解释过(或者我错过了正确的帖子).
在我的组件中,用户在一个视图中输入需要存储在两个表中的数据:标准的Joomla User表,即#__users用于存储未包含在Joomla中的数据的附加表,即#__users_complements
我是初学者,所以也许我错了,但我明白joomla的标准功能只能在一个表中保存表单的结果.就我而言,我想我必须覆盖模型中的标准函数:com_component/model/my_model.php.
1)我很困惑,因为我真的不明白哪个函数必须被覆盖:save()?商店()?其他?
2)假设我重写了save()函数,我应该重写所有代码来保存数据(爆炸数据数组并创建所有更新查询),还是应该创建2个标准表对象.
在这种情况下,(2个对象)每次将整个数据数组发送到父函数似乎很奇怪,因为我知道一个部分用于表1而另一部分用于表2.我应该能够在分开之前拆分我呢?
3)当我从表单中获取数据并调用模型的保存功能时,是否应该创建2个模型并从我的控制器管理这些模型?
你能帮我澄清一下如何在多个表中保存吗?我们非常感谢代码示例.谢谢
l_r*_*l_r 19
我终于做到了.因为我花了很多时间在这上面,发现有很多人在寻找答案,这就是我的表现.
我想您知道如何使用标准MVC结构创建组件:
在模型组件\ my_component\models\my_model.php中创建自己的保存功能
public function save($data)
{
// Initialise variables.
$userId = (!empty($data['id'])) ? $data['id'] : (int)$this->getState('user.id');
$user = JFactory::getUser();
$table_one = $this->getTable('TableOne', 'MyComponentTable', array());
$table_two = $this->getTable('TableTwo', 'MyComponentTable', array());
// Bind the data.
if (!$table_one->bind($data))
{
$this->setError(JText::sprintf('USERS PROFILE BIND FAILED', $user->getError()));
return false;
}
if (!$table_two->bind($data))
{
$this->setError(JText::sprintf('USERS PROFILE BIND FAILED', $user->getError()));
return false;
}
// Store the data.
if (!$table_one->save($data))
{
$this->setError($user->getError());
return false;
}
if (!$table_two->save($data))
{
$this->setError($user->getError());
return false;
}
return $user->id;
}
Run Code Online (Sandbox Code Playgroud)
当然,您需要在save函数中调用getTable函数
public function getTable($type = 'TableOne', $prefix = 'MyComponentTable', $config = array())
{
// call the administrator\components\com_mycomponent\tables\__tablename__.php
$this->addTablePath(JPATH_COMPONENT_ADMINISTRATOR . '/tables');
return JTable::getInstance($type, $prefix, $config);
}
Run Code Online (Sandbox Code Playgroud)
它的工作原理!很简单!当然,正如我在我的问题中所说的那样,整个$ data被发送到父save()函数,以及table_one或table_two不需要的数据.它以标准的joomla结构(在代码中没有hack或直接查询)的方式工作.
希望能帮助到你.