- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从今天早上开始,我面临着一个非常大的问题。我正在使用 CodeIgniter 开发网站,并使用 GAS ORM 开发数据库。我基本上有两张 table 。一个叫“pool”,一个叫“partners”。我在这两个表之间有两个关联,所以我的表 Partners 中有两个外键引用表池。
池(#id:整数,名称:varchar)合作伙伴(#id:integer, associated_pool_id=>Pool, futur_associated_pool_id=>Pool)。
因为我有两个对同一个表的引用,所以我不能将外键命名为“pool_id”。所以在我与 Gas ORM 的关系中,我必须指定列的名称。我这样做了,但它不起作用...这是我所做的:
class Partner extends ORM {
public $primary_key = 'id';
public $foreign_key = array('\\Model\\Pool' => 'associated_pool_id', '\\Model\\Pool' => 'future_associated_pool_id');
function _init()
{
// Relationship definition
self::$relationships = array(
'associated_pool' => ORM::belongs_to('\\Model\\Pool'),
'future_association_pool' => ORM::belongs_to('\\Model\\Pool'),
);
self::$fields = array(
'id' => ORM::field('auto[11]'),
'name' => ORM::field('char[255]'),
'associated_pool_id' => ORM::field('int[11]'),
'future_associated_pool_id' => ORM::field('int[11]')
);
}
在我的 Pool 类中:
class Pool extends ORM {
public $primary_key = 'id';
function _init()
{
// Relationship definition
self::$relationships = array(
'associated_partner' => ORM::has_many('\\Model\\Partner'),
'future_associated_partner' => ORM::has_many('\\Model\\Partner'),
);
self::$fields = array(
'id' => ORM::field('auto[11]'),
'name' => ORM::field('char[50]'),
);
}
我有一个测试 Controller 测试是否一切正常:
class Welcome extends CI_Controller {
public function index()
{
$pool = \Model\Pool::find(1);
echo $pool->name;
$partners = $pool->associated_partner();
var_dump($partners);
}
但我有一个错误说:
Error Number: 1054
Champ 'partner.pool_id' 包含在 where 子句中
SELECT * FROM partner
WHERE partner
.pool_id
IN (1)
我不知道如何向 Gas ORM 指定它不应该使用“pool_id”而是“associated_pool_id”......
谢谢你的帮助!!!!!!!!!!!!!!!
最佳答案
我不知道,这个话题是否仍然是最新的并且对你们中的一些人感兴趣,但总的来说,我遇到了完全相同的问题。
我决定将 Gas ORM 与 CodeIgniter 结合使用作为我的映射器。由于我的数据库结构是给定的,它不遵循 Gas 的 table_pk 约定,我必须自己定义一个 外键,它应该引用我的自定义数据库外键。但是,它的定义对任何东西都没有影响。就像上面的错误一样,映射器无法构建正确的 SQL 语句。该声明看起来与您的相似:
SELECT * FROM partner WHERE partner.pool_id IN (1)
好吧,Gas 似乎忽略了自定义外键并尝试使用默认的 table_pk 约定。这意味着,它通过将表与下划线字符合并来获取表(在您的情况下:池)和主键(id)。
我发现,orm.php 的构造函数处理实体中定义的每个主键和外键。在第 191 行,代码调用了一个与 empty 组合的 if 子句。 php的功能。由于主键总是定义的,并且语句中没有否定,所以它每次都会跳过子句的内部部分。但是,内部部分负责自定义外键。
长话短说,我在 orm.php 的第 191 行添加了一个否定 (!),这导致我得到以下代码:
if ( ! empty($this->primary_key))
{
if ( ! empty($this->foreign_key))
{
// Validate foreign keys for consistency naming convention recognizer
$foreign_key = array();
foreach($this->foreign_key as $namespace => $fk)
{
$foreign_key[strtolower($namespace)] = $fk;
}
$this->foreign_key = $foreign_key;
}
else
{
// If so far we didnt have any keys yet,
// then hopefully someone is really follow Gas convention
// while he define his entity relationship (yes, YOU!)
foreach ($this->meta->get('entities') as $name => $entity)
{
if ($entity['type'] == 'belongs_to')
{
$child_name = $entity['child'];
$child_instance = new $child_name;
$child_table = $child_instance->table;
$child_key = $child_instance->primary_key;
$this->foreign_key[strtolower($child_name)] = $child_table.'_'.$child_key;
}
}
}
}
好吧,这个小修复对我帮助很大,我希望你们中的一些人也能利用这个提示。
关于mysql - 同一个表 Gas Orm 的多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37812459/
我正在使用松露部署合约,当我将气体限制指定为我想要用于交易的气体时,我总是会收到超出气体限制的错误。为什么会出现这种情况? 编辑我想做的是将加密小猫 KittyCore.sol 合约部署到我的本地开发
我正在获取不属于自己的代币的 ERC721 转移。有什么帮助吗? 未处理的拒绝(错误):无法估计气体;交易可能会失败或可能需要手动 gas 限制(error={"code":-32603,"messa
我正在使用 Mogsdad here 发布的增强工作流程脚本. 我已经设法解决了一些问题,但目前我遇到的一个问题是本节中出现的错误 - // Record approval or rejection
我让这个函数循环遍历所有工作表,如果工作表未隐藏,则将工作表名称添加到数组 out 中。 function sheetnames() { var sheets = SpreadsheetApp.g
在我的 html 代码中,我调用一个脚本来编辑 Google 表单,然后加载该表单。我的问题是,网页在脚本更新完成之前加载。 google.script.run.c
我需要构建iOS的OpenBLAS库。我选择构建它的 0.3.6 版本。我相信这是该库最新的稳定版本。 您可以在此处找到该库的版本 - https://github.com/xianyi/OpenBL
我正在使用 ganache 创建 10 个以太坊账户。我想将以太坊从一个账户转移到一个智能合约。我通过编写以下两个可靠的智能合约来做到这一点; pragma solidity >=0.4.0 {
我的脚本有时有效,有时会出错。运行调试显示我的 array.sort 可能是问题所在。这是错误: We're sorry, a server error occurred. Please wait a
我目前正在为我工作的公司的分支机构构建一个 Google 网站。作为该网站的一部分,我们有一个托管 Web 应用程序的页面,该应用程序在访问时会获取当前用户的 ID,并使用 JavaScript
Google Apps 脚本支持 Triggers ,那个通行证Events触发功能。不幸的是,开发环境将允许您在不传递参数的情况下测试函数,因此您不能以这种方式模拟事件。如果您尝试,您会收到如下错误
除非我使用 .toLocaleDateString() 方法,否则下面的函数返回的日期比应有的日期少一天。我做错了什么或者这是一个缺陷? function myDate() { var s
嗨,我有以下汇编代码, .export __ls__11NSDOM_EncapFf .text __ls__11NSDOM_EncapFf: /* first load the symbolic co
我试图在不同的侧边栏中调用另一个侧边栏,以在谷歌文档中创建一种选项卡式界面。我不知道如何调用在当前侧边栏的 html 文件中显示新侧边栏的服务器端函数。 这是我的 html 侧边栏按钮布局...(不起
我刚刚开始使用 GAS,所以如果这是一个明显的问题,我将不胜感激任何见解并道歉。我正在尝试实现一个日期选择器,以便用户可以选择一些日期而不是输入它们。我使用此问题中的代码来执行此操作: Returni
Google Apps 脚本支持 Triggers ,即通过Events来触发功能。不幸的是,开发环境将允许您测试没有参数传递的函数,因此您无法以这种方式模拟事件。如果您尝试,您会收到如下错误: Re
我想显示来自 GAS 的数据并自动显示电子表格中每个单元格的数据。我尝试了“appendRow”,但出现错误(超过 2000000 个单元格)。如果我可以“appendRow”,请告诉我。 现在,我尝
GAS 初学者遇到了从 Google Apps 脚本循环中检索所有条件匹配值的问题。 我的电子表格中的一列有日期。条件运算符if (formattedCheckInDate == formattedT
我需要将函数传递的值(例如 20.35)添加到每个选定的单元格。我有一个巨大的列表,下面的函数超时,最多可以运行 6 分钟而无法将添加的结果添加到单元格 如何实现一种解决方法,以便每次在完成计算后立即
似乎有很多关于此的问题,但没有一个完全符合我的需求。 我使用的是 GAS,它不接受正则表达式lookbehind。 我有下面的正则表达式,它应该匹配第五个字符后的 :00。因此忽略前 5 个字符,无论
我有一个 Google App Script Code 代码,要求用户通过 html 自定义对话框输入一些值。对话框中的按钮触发 .gs 文件中的一个函数,我想等待该触发的函数返回,然后再继续其余代码
我是一名优秀的程序员,十分优秀!