如何连接到在 cake php v3.x 的 salesforce 中创建为自定义字段的 Heroku connect table
How to connect to Heroku connect's table that is created as custom field in salesforce in cake php v3.x
我正在尝试通过 CakePHP 3 连接 Heroku connect table。出于某种原因,当我尝试连接名称以 '__c'
PHP Fatal error: Call to a member function newEntity() on boolean
之前,我解决了我在 CakePHP 中遇到的基本连接问题
形式。
所以我可以连接到 table 名称中没有“__c”的一个。从错误消息中,我了解到由于某种原因我的蛋糕应用无法连接到我想要连接的 table。
在我的 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' 连接这些字段 (table),请帮助我。
感谢 ndm Cake 在我使用这些特殊的 classes 时对其 class 名称和字母大小写很敏感。
我也是解决了一晚上的问题。
在我的控制器中,我向 table class 添加了单独的实体 classes。
use App\Model\Entity\SomeFields;
use Cake\ORM\TableRegistry;
并且当我创建数据对象时,我使用手动构造这些 classes 而不是使用 newEntity()
$someFieldTable = TableRegistry::get('BottomSheet');
$someField = new SomeFileds();
现在我可以手动将变量分配给数据对象
例如
$someField->fieldName = data['fieldName'];
为了保存数据,我现在不得不手动调用保存函数
$someFieldTable->save($someField)
还有……瞧!
这是我的肮脏解决方案类型,我应该正确修复 classes 和文件的名称。
再次感谢 ndm 的帮助!
使用 TableRegistry class 是一个有效的答案,这里是在控制器中工作的自动装配 table 的正确方法:
如您所知,您的文件命名方案不正确,但这不是您使用 Heroku 的 table 名称格式的完整解决方案。您在 $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());
}
}
}
我正在尝试通过 CakePHP 3 连接 Heroku connect table。出于某种原因,当我尝试连接名称以 '__c'
PHP Fatal error: Call to a member function newEntity() on boolean
之前,我解决了我在 CakePHP 中遇到的基本连接问题
所以我可以连接到 table 名称中没有“__c”的一个。从错误消息中,我了解到由于某种原因我的蛋糕应用无法连接到我想要连接的 table。
在我的 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' 连接这些字段 (table),请帮助我。
感谢 ndm Cake 在我使用这些特殊的 classes 时对其 class 名称和字母大小写很敏感。
我也是解决了一晚上的问题。 在我的控制器中,我向 table class 添加了单独的实体 classes。
use App\Model\Entity\SomeFields;
use Cake\ORM\TableRegistry;
并且当我创建数据对象时,我使用手动构造这些 classes 而不是使用 newEntity()
$someFieldTable = TableRegistry::get('BottomSheet');
$someField = new SomeFileds();
现在我可以手动将变量分配给数据对象 例如
$someField->fieldName = data['fieldName'];
为了保存数据,我现在不得不手动调用保存函数
$someFieldTable->save($someField)
还有……瞧! 这是我的肮脏解决方案类型,我应该正确修复 classes 和文件的名称。 再次感谢 ndm 的帮助!
使用 TableRegistry class 是一个有效的答案,这里是在控制器中工作的自动装配 table 的正确方法:
如您所知,您的文件命名方案不正确,但这不是您使用 Heroku 的 table 名称格式的完整解决方案。您在 $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());
}
}
}