代码之家  ›  专栏  ›  技术社区  ›  Paolo Bergantino

cakephp-有很多没有抓取?

  •  0
  • Paolo Bergantino  · 技术社区  · 15 年前

    也许我的一天过得很慢,但对我来说,我无法理解为什么会这样。我有一段时间没有做cakephp了,我正在尝试使用1.3版本,但这似乎不起作用…

    我有两种型号:

    阿雷普

    <?php
    class Area extends AppModel {
        var $name = 'Area';
        var $useTable = 'OR_AREA';
        var $primaryKey = 'A_ID';
    
        var $belongsTo = array(
            'Building' => array(
                'className' => 'Building',
                'foreignKey' => 'FK_B_ID',
            ),
            'Facility' => array(
                'className' => 'Facility',
                'foreignKey' => 'FK_F_ID',
            ),
            'System' => array(
                'className' => 'System',
                'foreignKey' => 'FK_S_ID',
            )
        );
    }
    ?>
    

    PHP

    <?php
    class Building extends AppModel {
        var $name = 'Building';
        var $useTable = 'OR_BLDG';
        var $primaryKey = 'B_ID';
    
        var $hasMany = array(
            'Area' => array(
                'className' => 'Area',
                'foreignKey' => 'FK_B_ID',
            )                    
        );
    }
    ?>
    

    OR_AREA 有一列标题为 FK_B_ID 指的是 B_ID .

    如果我运行类似于:

    $this->Building->find('all', array('recursive' => 2));
    

    我空了 [Area] 所有建筑的阵列,即使在 奥尔萨地区 与建筑物相关的表。不仅如此,查询表甚至没有显示cakephp试图查找除 OR_BLDG . 更令人费解的是,如果我这样做的话:

    $this->Area->find('all');
    

    我得到了所有的区域和 [Building] 适当时填充数组。

    我错过了什么?

    编辑:

    我的模式的相关部分:

    CREATE TABLE ORDB_ADMIN.OR_AREA
    (
      A_ID            NUMBER(8),
      NAME            VARCHAR2(255 BYTE)            NOT NULL,
      FK_F_ID         NUMBER(8),
      FK_S_ID         NUMBER(8),
      FK_B_ID         NUMBER(8)
    )
    
    CREATE TABLE ORDB_ADMIN.OR_BLDG
    (
      B_ID           NUMBER(8),
      BLDG           VARCHAR2(90 BYTE)              NOT NULL
    )
    

    我觉得值得一提的是我正在使用 甲骨文公司 我发现 a ticket 这似乎描述了我所发生的事情,但它在18个月前关闭了,没有提供关于问题是什么/采取了什么措施来纠正它的真正细节。

    我还在1.2 cakephp书的“hasmany”部分发现了一条评论,内容如下:

    如果您的HasMany关联没有返回任何记录,请检查主键和ForeignKey的列类型是否相同。如果一个是int,另一个是char,您将不会从关联中获得任何记录(并且没有警告)。

    但是,正如您在上面看到的,键列是两端的数字(这也是Cakephp希望它们在Oracle中的表现)。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Paolo Bergantino    15 年前

    终于找到了这一切发生的原因。虽然我在Oracle Cakephp中定义了所有大写的列,但它们都是小写的,并且在将自定义列定义为大写时找不到它们。所以把我所有的$primarykey和foreignkey定义都改成小写就解决了我的问题。

    我打开了一个 ticket 关于这个问题,在找出原因之前,我不确定除了在书上做笔记之外还有多少事情要做,这样别人就不会再浪费几天时间了:)

        2
  •  0
  •   Lizard    15 年前

    我不确定,这是否正确,但你有什么像我不正确的外号键区域模型…是这样吗?

        3
  •  0
  •   Community Mohan Dere    9 年前

    对我来说,cakephp 1.3中的belogsto关联似乎有问题。我想如果你把外国钥匙换成 area_id building_id . 看一看 this 邮政。另一个人也有类似的问题,这个解决方案对他很有效。

        4
  •  0
  •   paullb    15 年前

    在处理自定义外键时似乎存在一些问题。我也有类似的问题。起初我尝试使用动态绑定函数,它们大部分时间都在工作。

    但是,最近我又把所有的东西都改成了xxx-id(cakephp用底线做了很多奇怪的事情,所以xxxx不应该包含任何底线),所有的关系都开始完美地工作了。

    因此,我建议您制作所有的外文密钥XXXX U ID,看看是否能解决您的问题。

    推荐文章