我正在设置一个用户/组系统,允许用户发送加入组的请求。
我似乎无法加载关联的模型并添加一行。真的很难抵制使用$ this-> query()并完成它的冲动......但我正在尝试学习Cake约定并以正确的方式做事。
在我的组模型处理组加入请求的函数中:
$this->loadModel('GroupRequest');
$this->data = array('GroupRequest' =>
array('user_id' => $uid, 'group_id' => $gid));
if($this->GroupRequest->save($this->data)){ echo 'save success'; }
else { echo 'save fail'; }
以下是我运行时遇到的错误:
警告(512):SQL错误:1064:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行的'loadModel'附近使用正确的语法[CORE / cake / libs / model / datasources / dbo_source.php,第684行] 查询:loadModel
注意(8):未定义的属性:Group :: $ GroupRequest [APP / models / group.php,第124行] 致命错误:在第124行/home/wxworksmat/sspot3/app/models/group.php中的非对象上调用成员函数save()
我也尝试过使用App :: import:
App::import('Model','GroupRequest');
我没有以这种方式导入模型的任何SQL错误,但它仍然不起作用。我在save()或create()调用上得到以下错误:
致命错误:在第124行/home/wxworksmat/sspot3/app/models/group.php中的非对象上调用成员函数save()
答案 0 :(得分:1)
您正在混淆控制器和模型方法
$this->loadModel()
是一种控制器方法,只能在那里使用。 你应该总是使用
$this->ModelName = ClassRegistry::init('ModelName');
其他地方
答案 1 :(得分:1)
我可能错了,请原谅我,如果我错了,但看起来你不太了解框架的概念。如果不给你一个完整的教程,很难回答你的问题。
这就是说,一切都依赖于模型关联。如果它正确完成,事情变得越来越容易。你应该阅读:
Associations: Linking Models Together
正确链接模型后,您将能够非常轻松地保存主模型以及相关模型。
答案 2 :(得分:1)
据我了解,你是试图从模型中做到这一点?
class GroupRequest extends AppModel {
public function associate($user, $group) {
$data["GroupRequest"] = array("user_id" => $user, "group_id" => $group);
$this->save($data);
}
}
然后在你的Controller中(假设是group_requests_controller)
$this->GroupRequest->associate($user, $group);
如果你从另一个控制器调用它,你将首先加载模型
$this->loadModel("GroupRequests");
$this->GroupRequest->associate($user, $group);
但是,如果您在GroupRequests控制器中执行所有这些操作,则应该能够直接保存,而无需为其创建单独的方法
public function add() {
$this->GroupRequest->create();
$this->GroupRequest->save($this->data); #for < 2.0
}
您的观点应该是
<?php
echo $this->Form->create("GroupRequest");
echo $this->Form->input("user_id");
echo $this->Form->input("group_id");
echo $this->Form->end("Submit");
?>
答案 3 :(得分:0)
我遇到的问题是我的模型顶部没有正确的模型关联声明。
现在我有:
group.php
var $hasMany = 'GroupRequest';
group_request.php
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
public function new_request($user, $group) {
$data["GroupRequest"] = array("user_id" => $user, "group_id" => $group, 'status' => 'pending');
if($this->save($data)){ return true;} else {return false;}
}
现在因为所有内容都设置为正确 ...我可以在我的group.php模型中执行此操作:
$this->GroupRequest->new_request($uid,$gid)
作为额外的奖励,因为关联正确填充,当我执行$ this-&gt;在我的组或用户模型中查找时,现在显示所有相关的GroupRequest条目。奖金数据FTW。