【问题标题】:QCubed - Join tables on multiple columnsQCubed - 在多列上连接表
【发布时间】:2017-11-16 00:24:07
【问题描述】:

我们公司继承了一个使用 Qcubed PHP 框架的应用程序。该框架的特点之一是 QQuery 查询方法。我们无法确定是否可以使用 QQuery 在两列上的两个表之间创建连接。

还有 QCubed 开发者吗?

【问题讨论】:

    标签: qcubed


    【解决方案1】:

    还有 QCubed 开发人员吗? -> 是的,很多。大部分动作都可以在github上找到

    https://github.com/qcubed/qcubed

    加入: QQuery 的有趣之处在于,当在表之间设置正确的外键时,它会自动连接表。示例页面有大量相关信息,请查看:

    http://qcu.be/examples/index.php

    额外提示:请在加载之前尝试定义连接。当请求相关对象时,Qcubed 会自动进行连接,但最好提前扩展它们。

    快速示例:

    //loads a Person object into memory
    //select * from person where id = 1;
    $objPerson = Person::Load(1); 
    echo $objPerson->Name . ' lives in ' . $objPerson->Town->Name;//will cause a query in the style "select * from town where id=x;"
    
    //loads a Person object into memory, and joins the Town table.
    //select * from person LEFT JOIN town on town.id = person.town_id where id = 1;
    $objPerson = Person::Load(1, QQ::Clause(QQ::Expand(QQN::Person()->Town))); 
    echo $objPerson->Name . ' lives in ' . $objPerson->Town->Name;//no extra query, town was already joined by the expand.
    

    两者都会返回相同的数据,但后者效率更高。

    回答关于将 2 列作为主要列的部分:我不是 100% 确定,我从来没有以这种方式使用过 QCubed。但是,请查看http://qcu.be/examples/vendor/qcubed/framework/assets/php/examples/code_generator/primary_keys.php,其中提到:

    QCubed 还为定义了多列主键的表提供了一些支持。对于具有多列主键的表,QCubed 将完全生成对象本身。但请注意,您将无法将此生成的对象用作另一个表的相关对象(换句话说,QCubed 不支持多列外键)。但是,通过这些对象中生成的所有 Load 方法,仍然可以完全开发一个包含使用多列外键的表的应用程序。基本上,每当您想通过多列外键访问相关对象时,您都可以直接调用该对象的 Load 方法来检索该对象。

    如果您想定义没有外键的关系,请查看本地安装中的 codegen.xml 文件。

    【讨论】:

    • 感谢 Zunderscore,这很有帮助,但我认为它没有解决我关于两列连接的主要问题。我指的是一种关系,其中一个表基于两个字段的值与另一个表相关。自动连接会根据两个字段的值定位到相关表吗?
    • @willyPowwow 我添加了一些关于多列主键的信息。
    猜你喜欢
    • 2011-04-06
    • 2012-08-16
    • 1970-01-01
    • 2018-05-11
    • 2014-10-03
    • 2018-01-09
    • 2014-07-10
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多