0

Microsoft バックエンドで実行されている Northwind データベースの 2 つのエンティティからのデータに対してライブ検索を実行する方法を示すチュートリアル/ビデオに従いました。

バックエンドを持つアプリケーションを開発する必要があるphp / mysqlため、これを行うためにphpプロデューサークラスを手に入れました。Wordpress DB に接続しましたが、すべて正常に動作しているようです。

ただし、私の問題は、関連するテーブルで検索を実行しようとするときです。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);

私の問題は、述語のフィールドを正しく参照することです。以下のように Posts title Entity だけを検索するコードを実行すると、正常に動作します。

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

次のように変更するとすぐに、動作しなくなります。コンソールにもエラーはありません。

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

「displayname」、「posts.user.displayname」、「user.displayname」など、「displayName」のいくつかのバリエーションと、キャメルケースのすべてのものも試しました。

誰かが私が間違っている場所を教えてもらえますか?

4

2 に答える 2

1

there is an example in the breeze web page that shows how to query on related properties.

// 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");

So, I think that in you code, the error can be in the next lines:

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

It should be:

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

jvrdelafuente が正しいことがわかりました... Breeze で oData の関連テーブルを参照するための正しい形式は、(Wordpress の例では) user.displayName です。私が抱えている問題は、php の odata プロデューサー ( https://github.com/MSOpenTech/odataphpprod/ ) にバグがあり、エラーが返されることです。多くの人が恩恵を受けることができると確信しているため、このプロジェクトが放棄されたことは残念です. 作成、更新、または削除はまだサポートされていません。

jvrdelafuente さん、ご協力ありがとうございます。

于 2013-05-09T18:54:09.103 に答える