0

我按照教程/视频展示了如何对来自在 Microsoft 后端运行的北风数据库上的两个实体的数据执行实时搜索。

我必须开发一个具有php / mysql后端的应用程序,因此必须掌握 php 生产者类来执行此操作。我已连接到 Wordpress 数据库,一切似乎都运行良好。

但是,我的问题是当我尝试对相关表执行搜索时。我有一个显示作者displayName(来自用户实体)、post titledate(来自帖子)的网格。

<input type="text" data-ng-model="searchText"/> {{searchText}}
<table class="table table-hover">
    <thead>
    <tr>
        <th>Author </th>
        <th>Date</th>
        <th>Title</th>
    </tr>
    </thead>
    <tr ng-repeat="post in posts">
        <td>{{post.user.displayName}}</td>
        <td>{{post.date}}</td>
        <td>{{post.title}}</td>
    </tr>
</table>

在控制器(实际上是 datacontext.js)中,我有以下内容从服务器获取数据:

    if (searchText && (searchText = searchText.trim())) {
        log("searching for " + searchText);
        var pred = breeze.Predicate
            .create('title', 'contains', searchText);               
        query = query.where(pred);

    } else {
        console.log("getting all");
    }

    return manager.executeQuery(query).then(success);

我的问题是正确引用谓词中的字段。当我运行代码仅搜索下面的帖子标题实体时,它工作正常。

var pred = breeze.Predicate
            .create('title', 'contains', searchText);

一旦我将其更改为以下内容,它就会停止工作。控制台中也没有错误。

 var pred = breeze.Predicate
            .create('title', 'contains', searchText)
            .or('displayname', 'contains', searchText);

我尝试了 'displayName' 的几种变体,例如 'displayname'、'posts.user.displayname'、'user.displayname' 以及 camelCase 中的所有变体。

有人可以告诉我哪里出错了吗?

4

2 回答 2

1

微风网页中有一个示例,显示了如何查询相关属性。

// Products in a Category whose name starts with 'S'
var query1 = EntityQuery.from("Products")
    .where("Category.CategoryName", "startswith", "S")

// Orders sold to a Customer located in California
var query2 = EntityQuery.from("Orders")
    .where("Customer.Region", "==", "CA");

所以,我认为在你的代码中,错误可能在下一行:

var pred = breeze.Predicate
            .create('title', 'contains', searchText)
            .or('displayname', 'contains', searchText);

它应该是:

var pred = breeze.Predicate
            .create('title', 'contains', searchText)
            .or('user.displayname', 'contains', searchText);
于 2013-04-29T12:08:36.000 回答
0

事实证明,jvrdelafuente 是对的……在 oData 中使用微风引用相关表的正确格式是(在 Wordpress 示例中)user.displayName。我遇到的问题是 php 的 odata 生产者(https://github.com/MSOpenTech/odataphpprod/)有一个错误并返回错误。很遗憾这个项目被放弃了,因为我相信很多人都可以从中受益。它还不支持创建、更新或删除。

感谢 jvrdelafuente 的帮助。

于 2013-05-09T18:54:09.103 回答