我已经按照教程/视频展示了如何对来自Microsoft后端运行的northwind数据库上的两个实体的数据进行实时搜索。
我必须开发一个具有php / mysql
后端的应用程序,以便掌握php生成器类来执行此操作。我已连接到Wordpress DB,它似乎都运行良好。
然而,我的问题是当我尝试在相关的表上执行搜索时。我有一个网格显示作者的displayName
(来自用户实体),post title
和date
(来自帖子)。
<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);
我的问题是正确引用Predicate中的字段。当我运行代码搜索下面的帖子标题实体时,它可以正常工作。
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中的所有变种。
有人可以告诉我哪里出错了吗?
答案 0 :(得分:1)
breeze网页中有一个示例,显示如何查询相关属性。
// 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);
答案 1 :(得分:0)
事实证明,jvrdelafuente是正确的...使用breeze引用oData中相关表的正确格式(在Wordpress示例中)user.displayName。我遇到的问题是php(https://github.com/MSOpenTech/odataphpprod/)的odata生成器有一个错误并返回错误。令人遗憾的是,这个项目已被放弃,因为我相信很多人都可以从中受益。它尚不支持创建,更新或删除。
感谢jvrdelafuente的帮助。