如何连接到Heroku connect';s表,该表在cake php v3.x中作为salesforce中的自定义字段创建
我正试图通过CakePHP3连接Heroku连接表。由于某些原因,当我尝试连接一个名称以“\uu c”结尾的表时,我会出现以下错误如何连接到Heroku connect';s表,该表在cake php v3.x中作为salesforce中的自定义字段创建,php,postgresql,cakephp,heroku,salesforce,Php,Postgresql,Cakephp,Heroku,Salesforce,我正试图通过CakePHP3连接Heroku连接表。由于某些原因,当我尝试连接一个名称以“\uu c”结尾的表时,我会出现以下错误 PHP Fatal error: Call to a member function newEntity() on boolean 之前,我解决了我在CakePHP中遇到的基本连接问题 形式 所以我可以连接一个表名中没有“\uuu c”的表。从错误消息中,我了解到由于某种原因,我的蛋糕应用程序无法连接到我要连接的表 在我的App/Model/Table/som
PHP Fatal error: Call to a member function newEntity() on boolean
之前,我解决了我在CakePHP中遇到的基本连接问题
形式
所以我可以连接一个表名中没有“\uuu c”的表。从错误消息中,我了解到由于某种原因,我的蛋糕应用程序无法连接到我要连接的表
在我的App/Model/Table/someFieldTable.php中,我有
public function initialize(array $config)
{
parent::initialize($config);
$this->table('salesforce.some_field__c');
$this->displayField('name');
$this->primaryKey('id');
}
我的tableController.php中还包含以下内容
$somefield = $this->someField->newEntity();
// variables are assigned to $somefield
if($this->someField->save($someField)){
// error handling here
}
我还不熟悉CakePHP和Heroku connect。如果有人知道如何用CakePHP中的后缀“_c”连接这些字段(表),请帮助我 感谢ndm,当我使用这些特殊类时,Cake对其类名和字母大小写非常敏感 我昨晚也解决了这个问题。 在我的控制器中,我向表类添加了单独的实体类
use App\Model\Entity\SomeFields;
use Cake\ORM\TableRegistry;
当我创建数据对象时,我使用手动构造这些类,而不是使用newEntity()
现在我可以手动将变量分配给数据对象
比如说
$someField->fieldName = data['fieldName'];
为了保存数据,我现在必须手动调用save函数
$someFieldTable->save($someField)
而且。。。瞧!
这是我的肮脏类型的解决方案,我应该修复类和文件的名称正确的。
再次感谢您对ndm的帮助 感谢ndm,当我使用这些特殊类时,Cake对其类名和字母大小写非常敏感 我昨晚也解决了这个问题。 在我的控制器中,我向表类添加了单独的实体类
use App\Model\Entity\SomeFields;
use Cake\ORM\TableRegistry;
当我创建数据对象时,我使用手动构造这些类,而不是使用newEntity()
现在我可以手动将变量分配给数据对象
比如说
$someField->fieldName = data['fieldName'];
为了保存数据,我现在必须手动调用save函数
$someFieldTable->save($someField)
而且。。。瞧!
这是我的肮脏类型的解决方案,我应该修复类和文件的名称正确的。
再次感谢您对ndm的帮助 使用TableRegistry类是一个有效的答案,以下是使控制器中的自动连线表正常工作的正确方法: 正如您已经被告知的,您的文件命名方案不正确,但这并不是使用Heroku格式化表名的完整解决方案。$this->table()中的条目不应该是带有点的数据库的名称空间,因为该数据库是通过当前连接(很可能是在app.php中定义的默认数据源)附加的,您正在对其进行查询。整个修复将包括:
// 1. Change the file name to the correct scheme: SomeFieldTable.php
// 2. In order for the controller to autowire the table, you must correctly
// name the controller file as well: SomeFieldController.php
// 3. Change the table name within SomeFieldTable.php to the appropriate
// name: 'some_field_c'
public function initialize(array $config)
{
parent::initialize($config);
$this->table('some_field__c');
$this->displayField('name');
$this->primaryKey('id');
}
// 4. Finally, in the controller, the table is accessed via the camel capsed name
class SomeFieldController extends AppController
{
public function getEndpoint()
{
$result_set = $this->SomeField->find()->all();
$this->set('result_set', $result_set);
}
public function saveEndpoint()
{
$new_some_field = $this->SomeField->newEntity($this->request->data);
if ($this->SomeField->save($new_some_field)) {
$this->set('new_some_field', $new_some_field);
} else {
$this->set('errors', $new_some_field->errors());
}
}
}
使用TableRegistry类是一个有效的答案,以下是使控制器中的自动连线表工作的正确方法: 正如您已经被告知的,您的文件命名方案不正确,但这并不是使用Heroku格式化表名的完整解决方案。$this->table()中的条目不应该是带有点的数据库的名称空间,因为该数据库是通过当前连接(很可能是在app.php中定义的默认数据源)附加的,您正在对其进行查询。整个修复将包括:
// 1. Change the file name to the correct scheme: SomeFieldTable.php
// 2. In order for the controller to autowire the table, you must correctly
// name the controller file as well: SomeFieldController.php
// 3. Change the table name within SomeFieldTable.php to the appropriate
// name: 'some_field_c'
public function initialize(array $config)
{
parent::initialize($config);
$this->table('some_field__c');
$this->displayField('name');
$this->primaryKey('id');
}
// 4. Finally, in the controller, the table is accessed via the camel capsed name
class SomeFieldController extends AppController
{
public function getEndpoint()
{
$result_set = $this->SomeField->find()->all();
$this->set('result_set', $result_set);
}
public function saveEndpoint()
{
$new_some_field = $this->SomeField->newEntity($this->request->data);
if ($this->SomeField->save($new_some_field)) {
$this->set('new_some_field', $new_some_field);
} else {
$this->set('errors', $new_some_field->errors());
}
}
}
您应该从遵循/命名约定开始,
someFieldTable
是不可能的。也谢谢你的提示ndm!我在Table文件夹中编写了someFieldTable作为userTable.php等的示例。我的实际代码中有更多的实名变量。我只是想大致了解一下解决方案。因为构造函数有一个错误,所以我假设初始化函数有一个错误。特别是,在salseforce中,将“_c”作为表名后缀(即“自定义字段”)的所有表都存在问题。我认为salseforce如何设置表在cakephp中有一个技巧。如果你有更多的想法或意见,请在这里发表。这并不是真正的名称是否真实,userTable
同样是错误的,而是关于小写字母和单数大小写,按照惯例,文件/类名应该是驼峰形的,即以大写字母开头,表类名必须是复数。另外,为了使模型在控制器中自动可用,它们的名称必须匹配,否则您需要手动加载它,这里没有显示。问题不在于数据库表,至少不在于所提到的错误。所以当我制作一个cake时,它需要一个大写字母和表名类,并且必须是复数。在昨晚的评论之后,我也尝试了一些解决方案,我将在下面写下我的解决方案。但一旦有机会,我一定会尝试你的解决方案!谢谢你的帮助!您应该从遵循/命名约定开始,someFieldTable
是不可能的。也谢谢你的提示ndm!我在Table文件夹中编写了someFieldTable作为userTable.php等的示例。我的实际代码中有更多的实名变量。我只是想大致了解一下解决方案。因为构造函数有一个错误,所以我假设初始化函数有一个错误。特别是,在salseforce中,将“_c”作为表名后缀(即“自定义字段”)的所有表都存在问题。我认为salseforce如何设置表在cakephp中有一个技巧。如果你有更多的想法或意见,请在这里发表。这并不是真正的名称是否真实,userTable
同样是错误的,而是关于小写字母和单数大小写,按照惯例,文件/类名应该是驼峰形的,即以大写字母开头,表类名必须是复数。另外,为了使模型在控制器中自动可用,它们的名称必须匹配,否则您需要手动加载它,这里没有显示。问题不在于数据库表,至少不在于所提到的错误。所以cake需要大写字母和表名