2017-11-23 6 views
1

私の会社では、データベースからユーザと企業を取得する必要があるSymfony webappに取り組んでいます。 しかし、私はODBC接続を使用することを余儀なくされています。私はpdo_odbcに行って、これはコントローラ(接続、クエリ、フェッチ、レンダリング)から正常に動作しています。symfony2とPDO_odbcを使用し、接続とクエリにサービスとリポジトリを使用

しかし、Doctrineを使用して接続できない場合は、エンティティとリポジトリの使用方法が少し失われます。

私が今やっていることは、データベースに接続し、クエリを実行し、データを取得し、1つのコントローラ機能でビューにレンダリングすることです。エンティティまたはリポジトリを使用しない場合、これは明らかに必要なものではありません。

さらに詳しい情報が必要な場合は、お気軽にコメントしてください。

PS:私は、一般的にはsymfonyのに新たなんだ例はあまり

答えて

3

を高く評価しているように、我々はいくつかのプロジェクトで同じものをやっています。

  • 書き込みリポジトリを、代わりにDoctrine ORMとQueryBuilderを使用して、我々はちょうどPDO文とPDO接続を使用します。

    私たちは、次の手順を行ってきました。

  • エンティティの代わりにモデルを作成します。すべてのモデルには、データの配列を受け取る "setFromDb()"関数があります。これらの情報は、モデルの属性と一致します。

  • サービス内では、コントローラはモデルでのみ作業しています。

私たちが書いたリポジトリは、サービスとして定義され、コンストラクタインジェクションとしてdoctrine接続を受け取るクラスです。それから、PDOとの接続と作業ができます。

リポジトリクラスの例(これらはデータベースクエリを処理し、彼らはsymfonyの/ドクトリンからリポジトリのクラスとは何の関係も持っていないので、我々はただのリポジトリにそれらを呼び出すことに注意してください)

class DemoRepositoryClass 
{ 
    private $connection; 

    public function __construct(Registry $doctrine) 
    { 
     // Get the database connection from doctrine 
     $this->connection = $doctrine->getConnection(); 
    } 

    public function test() 
    { 
     $query = "SELECT * FROM XXX WHERE FOO = 'BAZ"; 
     $stmt = $this->conncetion->prepare($query); 
     // [...] Do as always with PDO; 
    } 

} 

このクラスは次のようになりますservices.ymlそれと

app.demo_repository_class: 
    class: AppBundle\Path\DemoRepositoryClass 
    arguments: ['@doctrine'] 
    public: true 

でサービスとして定義され、あなたは一例として、コントローラからのサービス機能を呼び出すことができます。

// In a controller action/function 
$this->get('app.demo_repository_class')->test(); 
+0

これは良い処理方法のようですが、リポジトリとサービスの例を挙げることができますか?私は一般的にSymfonyにも新しかったと付け加えました。 –

+0

接続部分はまだ少し漠然としています。 parameters.xmlファイルを使って接続を追加しようとしましたが、うまくいきませんでした。私のコントローラでは現在、 '$ conn = new PDO( 'odbc:DSN'、 'USER'、 'PASS');' –

+0

を使用しています。プロジェクトでは、config内の接続をdoctrineで定義します。普通のPDOを使用している場合は、リポジトリクラスのコンストラクタ内で接続を定義して、接続データをパラメータを持つサービスに注入するだけです。だから、パラメータでホストなどを定義し、services.ymの '@dotrine'の部分の代わりにそれらを注入してください – KhorneHoly

関連する問題