2015-10-05 67 views
0

我使用這個bundle和我wanto通過%LIKE% MySQL來找到我的元素使用像%2

我的文件是這樣的:

{ 
    "_id": "60a403542a2b7d44bf84ed569d1e6efe", 
    "_rev": "1-9e1ed380dd91ac8c835ef0f8e152f0a8", 
    "type": "mytype", 
    "doctrine_metadata": { 
     "indexes": [ 
      "name", 
     ] 
    }, 
    "name": "barfoo", 

} 

我想找到的所有元素那開始barfo

我看到這個link,但我不知道這是否是一個正確的解決方案。 如何在couchDb + symfony2中查詢Like

回答

1

couchDb(1.6.1)中沒有%Like%,但可以使用startkey和endkey。

你必須創建一個類似的看法:

function (doc) { 
    if (doc.type = 'myType') { 
     emit(doc.name, doc.name); 
    } 
} 

與名字例如people

例如和簡單

Designname = people 
viewname = people 

之後,你可以做到這一點捲曲

curl -X GET 'http://localhost:5984/db/_design/people/_view/people?startkey="foo"&endkey="foo\ufff0"' 

通過這種方式,你可以找到以foo開頭的所有元素。

爲什麼\ ufff0?勾選此link

字符串範圍

如果你需要開始和結束這包括每串有 給定前綴鍵,最好是使用高價值的Unicode字符,比 使用「ZZZZ '後綴。

也就是說,而非:

startkey = 「ABC」 & endkey = 「abcZZZZZZZZZ」 你應該使用:

startkey = 「ABC」 & endkey = 「ABC \ ufff0」

如何在Symfony中做到這一點?

如果你想創建由Symfony的查看 可以在yourapp/AppBundle/CouchDocument/View/PeopleView.php

<?php 

namespace yourapp\AppBundle\CouchDocument\View; 

use Doctrine\CouchDB\View\DesignDocument; 

class PeopleView implements DesignDocument 
{ 

    public function getData() 
    { 
     $people = <<<'JS' 
function (doc) { 
     if (doc.type = 'myType') { 
      emit(doc.name, doc.name); 
     } 
    } 
JS; 

     return array(
      'views' => array(
       'people' => array(
        'map' => $people, 
       ), 
      ) 
     ); 

    } 
} 

,並在控制器中創建視圖,你可以做這樣的事情

/** 
* @Route("/testPeople/{code}", name="test_people") 
* @Method({"GET"}) 
* @Template("myAppBundle:People:test_query.html.twig") 
*/ 
public function testPeopleAction($code) 
{ 

    $dm = $this->container->get(
     'doctrine_couchdb.odm.default_document_manager' 
    ); 
    $peopleView = new PeopleView(); 
    $client = $this->container->get('doctrine_couchdb.odm.default_document_manager'); 
    $view = $client->createDesignDocument('people', $peopleView); 

    $relatedObjects = $dm->createNativeQuery('people', 'people') 
     ->setStartKey($code) 
     ->setEndKey($code . "\xEF\xBF\xB0") 
     ->execute(); 
    $a = array(); 
    foreach ($relatedObjects as $doc) { 
     $a[] = $doc['value'] //it is your results 
    } 

    return array(
     'results' => $a 
    ); 
} 

我看到了單元測試裏面vendor/doctrine/couchdb/tests/Doctrine/Tests/CouchDB/CouchDBClientTest.php找到有用的東西

我不知道這是最好的方式,但對我來說它的工作原理: )