私はPDO :: FETCH_CLASSに必要なモデルオブジェクトを生成するために使用しているDB抽象バンドルの下にカスタムコマンドクラスを持っています。 Doctrineモデルとよく似ています。私が直面している問題は、生成されたクラスで再利用できるように、PDOインスタンスのサービスを取得する必要があることです。 symfonyのスコープから何かを注入してサービスパラメータを取得する方法はありますか?カスタム生成クラスのsymfonyコンテナパラメータにアクセスする方法
私はコマンドphp bin/console pdo:generate:model <NameOfBundle>
を実行して、モデルと呼ばれるディレクトリ内のバンドルのルートにBase/Peerモデル(Propelに似ています)を置きます。
生成されたDBピアモデルの一つの例です:symfonyの構造の自分の無知を許し、
namespace Ode\AppBundle\Model;
use Ode\AppBundle\Model\HflogsBase;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class Hflogs extends HflogsBase implements \JsonSerializable, ContainerAwareInterface {
private $container;
public function __construct() {
parent::__construct();
}
public function setContainer(ContainerInterface $container = null) {
$this->container = $container;
}
public function frequency() {
return number_format($this->frequency, 2, '.', '');
}
/**
* @todo Run another query on the database to acquire a relational element
*/
public function getPdoInstance() {
$pdo = $this->container->get('ode_pdo.db');
}
}
してください、私が言ったを継承するために自分自身のクラスを取得する方法についての完全な損失で午前構造のプロパティ。要求ごと
UPDATE 1
ここではベースモデルクラスです:
namespace Ode\AppBundle\Model;
class HflogsBase {
const TABLE_NAME = 'hflogs';
const MODEL_NAME = 'Ode\AppBundle\Model\Hflogs';
public $id;
public $frequency;
public $mode;
public $description;
public $time_on;
public $time_off;
public $lat;
public $lng;
public $user_id;
public $submitted;
const COLUMNS = 'a.id,a.frequency,a.mode,a.description,a.time_on,a.time_off,a.lat,a.lng,a.user_id,a.submitted';
public function __construct() {}
}
UPDATE 2
の代わりに別のユーザー以下のコメントを爆破は私がインスタンス化方法を尋ねましたピアモデルクラス。私は基本的に\ PDO:FETCH_CLASSのPDOのクラスタイプとしてコントローラでそれを使用します。 PDOでは、オブジェクトのインスタンス化が行われ、問合せのすべての行の値が移入されるため、DBからの結果を強く型付けします(疎結合の標準クラスまたは連想配列の結果をデバッグするのに必要な時間が短縮されます)。
したがって、たとえば、ここで私は、コントローラに何をすべきかのインスタンスである:
class DefaultController extends Controller
{
/**
* @Route("/test", name="testpage")
*/
public function testAction() {
$logs = $this->get('ode_pdo.db')->query("
SELECT " . HflogsBase::COLUMNS . "
FROM " . HflogsBase::TABLE_NAME . " AS a
WHERE a.id NOT IN (
SELECT id
FROM " . HflogMetaBase::TABLE_NAME . "
WHERE meta_key != 'is_inactive'
AND meta_value = 1
)
")->fetchAll(\PDO::FETCH_CLASS, HflogsBase::MODEL_NAME);
return new Response('');
}
}
HflogsBase
からMODEL_NAME
定数は、ピアクラス名を参照:あなたがしている場合
const MODEL_NAME = 'Ode\AppBundle\Model\Hflogs';
私たちはHflogsBaseのソースをご覧くださいできますか? –
@OlivierHenry最新の記事を見る! – cj5
私は、HfLogBaseでcontainerAwareを拡張してcontainerAwareInterfaceを実装する必要があると思います。 Controllerクラスとその親を見ることができます。 –