2013-04-29 6 views
0

Microsoft 백엔드에서 실행되는 northwind 데이터베이스에서 두 엔티티의 데이터를 실시간 검색하는 방법을 보여주는 자습서/비디오를 따라했습니다.Breezejs : 관련 테이블의 필드에서 검색 수행

php/mysql 백엔드가있는 응용 프로그램을 개발해야하므로 이렇게하려면 PHP 제작자 클래스를 보유하고 있어야합니다. 나는 Wordpress DB에 연결되어 있으며, 모두 잘 작동하고있는 것 같다.

하지만 내 문제는 관련 테이블에서 검색을 수행하려고 할 때입니다. 저자의 displayName (사용자 엔티티에서), post titledate (글의 게시물)을 보여주는 표가 있습니다.

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

내 문제가 제대로 술어의 필드를 참조 함께 : 컨트롤러 (실제로 datacontext.js) I는 서버에서 데이터를 가져 오기 위해 다음이에서

<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> 

. 게시물 제목 엔티티를 검색하는 코드를 실행할 때 제대로 작동합니다.

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

다음과 같이 변경하면 곧 작동을 멈 춥니 다. 콘솔에도 오류가 없습니다.

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

나는 그런 '표시 이름', 'posts.user.displayname', 'user.displayname'뿐만 아니라 낙타 표기법의 모든 것과 '나 displayName'의 여러 변종을 시도했습니다.

누군가 내가 잘못 가고 있다고 말할 수 있습니까?

답변

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); 
+0

답변 주셔서 감사합니다.하지만 이미 모든 유사 콘텐츠를 사용해 보았습니다. 아직도 운이 없다! –

+0

외래 키 제약 조건과 관련이있을 수 있습니까? 아니면 외래 키 제약 조건과 관련이 있습니까? –

+0

작동하지 않습니까? 어떤 오류 던지 무엇입니까? – jvrdelafuente

0

그것은 jvrdelafuente이 옳다 밝혀졌습니다. .. breeze를 사용하여 oData의 관련 테이블을 참조하는 올바른 형식은 (Wordpress 예제에서) user.displayName입니다. 내가 가진 문제는 php (https://github.com/MSOpenTech/odataphpprod/)의 odata 제작자가 버그가있어서 오류를 반환한다는 것입니다. 많은 사람들이 그 혜택을 누릴 수 있음을 확신하면서이 프로젝트가 포기되었다는 것은 수치스러운 일입니다. 아직 생성, 업데이트 또는 삭제를 지원하지 않습니다.

감사합니다. jvrdelafuente에게 도움을 요청합니다.

관련 문제