首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Propel2中,通过空值过滤交叉引用

在Propel2中,通过空值过滤交叉引用
EN

Stack Overflow用户
提问于 2015-04-22 23:08:07
回答 2查看 506关注 0票数 1

我使用Propel2 orm。

我有两个表条目和类别,通过一个EntryCategory表通过多到多的关系连接.

我将isCrossRef设置为schema.xml中的true。

一切正常:我能够按类别过滤条目,如下所示:

代码语言:javascript
复制
EntryQuery::create()->filterByCategory($cat)

我无法在没有类别的情况下过滤条目。我试过了

代码语言:javascript
复制
EntryQuery::create()->filterByCategory(null, Criteria::EQUAL)

代码语言:javascript
复制
EntryQuery::create()->filterByCategory(null, Criteria::ISNULL)

但是,它给了我

代码语言:javascript
复制
'filterByCategory() only accepts arguments of type \Category or Collection'

我也试过

代码语言:javascript
复制
EntryQuery::create()->where('Category IS NULL')

但是,我有个错误

代码语言:javascript
复制
Unknown column 'Category' in 'where clause'

所以我需要帮助..。

编辑:

我的schema.xml摘录:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<database package="core" name="bank" identifierQuoting="true" defaultIdMethod="native" defaultPhpNamingMethod="underscore">
  <table name="category" idMethod="native" phpName="Category">
    <column name="id" phpName="Id" type="INTEGER" size="5" primaryKey="true" autoIncrement="true" required="true"/>
    <column name="name" phpName="Name" type="VARCHAR" size="50" required="true"/>
    <column name="parent_id" phpName="ParentId" type="INTEGER" size="5"/>
    <foreign-key foreignTable="category" phpName="Parent">
      <reference local="parent_id" foreign="id"/>
    </foreign-key>
    <index name="parent_id">
      <index-column name="parent_id" size="5"/>
    </index>
    <vendor type="mysql">
      <parameter name="Engine" value="InnoDB"/>
    </vendor>
  </table>
  <table name="entry" idMethod="native" phpName="Entry">
    <column name="id" phpName="Id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
    <column name="account_id" phpName="AccountId" type="INTEGER" required="true"/>
    <column name="date" phpName="Date" type="DATE" required="true"/>
    <column name="entry" phpName="Entry" type="VARCHAR" size="255" required="true"/>
    <column name="type" phpName="Type" type="INTEGER" size="2"/>
    <column name="amount" phpName="Amount" type="DECIMAL" size="12" scale="2" required="true"/>
    <index name="account">
      <index-column name="account_id"/>
    </index>
    <index name="md5">
      <index-column name="md5" size="32"/>
    </index>
    <index name="md5_2">
      <index-column name="md5" size="32"/>
      <index-column name="account_id"/>
    </index>
    <foreign-key foreignTable="account">
      <reference local="account_id" foreign="id"/>
    </foreign-key>
    <vendor type="mysql">
      <parameter name="Engine" value="InnoDB"/>
    </vendor>
  </table>
  <table name="entry_category" idMethod="native" phpName="EntryCategory" isCrossRef="true">
    <column name="entry_id" phpName="EntryId" type="INTEGER" primaryKey="true" required="true"/>
    <column name="category_id" phpName="CategoryId" type="INTEGER" size="5" primaryKey="true" required="true"/>
    <foreign-key foreignTable="entry" name="entry_category_ibfk_1">
      <reference local="entry_id" foreign="id"/>
    </foreign-key>
    <foreign-key foreignTable="category" name="entry_category_ibfk_2">
      <reference local="category_id" foreign="id"/>
    </foreign-key>
    <index name="category_id">
      <index-column name="category_id" size="5"/>
    </index>
    <vendor type="mysql">
      <parameter name="Engine" value="InnoDB"/>
    </vendor>
  </table>
</database>
EN

回答 2

Stack Overflow用户

发布于 2015-04-29 23:30:29

您需要使用Id或名称或任何列名。

->filterByCategory需要一个类别类型的propel对象。

->filterByCategoryId()或任何实际列的名称。(拥有您的模式将是有益的)

不传递任何东西会将其设置为查找null。其他任何内容都以字符串文本的形式处理。where column = 'null'

使用->filterByCategory() (如果这是列的名称而不是外键引用)或使用->filterByCategoryId() (如果'CategoryId‘是列的'phpName’)。

票数 0
EN

Stack Overflow用户

发布于 2021-01-05 17:56:15

好的,我找到了两个解决方案(是的,5年后;)

代码语言:javascript
复制
EntryQuery::create()->leftJoinCategory->where('Category.CategoryId IS NULL')

代码语言:javascript
复制
EntryQuery::create()->useCategoryQuery(null, Criteria::LEFT_JOIN)->filterByCategoryId(null, Criteria::ISNOTNULL)->endUse();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29810570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档