我是symfony的新手,我需要連接多個資料庫的查詢。我遇到了很多類似的問題,但我無法解決這個問題。我試著在存盤庫中加入查詢,得到的錯誤是 "AppEntitycustomerdataCustomerAction "類在連鎖配置的命名空間AppEntitySteuerStUserSendAuth中沒有找到"。 下面我添加了代碼,使用。
我的doctrine.yaml
doctrine:
dbal:
default_connection: default[/span
連接。
steuer:
# 為你的資料庫服務器配置這些。
網址。'%env(resolve:DATABASE_STEUER_URL)%'
驅動程式。
kundendaten:
# 為你的資料庫服務器配置這些。
網址。'%env(resolve:DATABASE_CUSTOMERDATA_URL)%'
驅動程式。
orm:
default_entity_manager: default[/span
entity_managers:
steuer:
連接:steuer
映射。
Steuer:
is_bundle: false[/span]。
型別:注釋
dir: '%kernel.project_dir%/src/Entity/Steuer'。
前綴。'AppEntitySteuer'。
別名:Steuern
customerdata。
連接:customerdata
映射。
Customerdata:
is_bundle: false[/span]。
型別:注釋
dir: '%kernel.project_dir%/src/Entity/Customerdata'。
前綴。'AppEntityCustomerdata'
別名。Customerdata
第一個資料庫物體:-
namespace AppEntitySteuer;
use DoctrineORMMapping as ORM;
/**.
* StUserSendAuth
* @ORMEntity(repositoryClass="AppRepositorySteuernStUserSendAuthRepository" )
* @ORMTable(name="st_user_send_auth")
*/
class StUserSendAuth
{
/**。
* @var int
*
* @ORMColumn(name="abgabe_sendauth_id", type="integer", nullable=false, options={"unsigned"=true})
* @ORMId
* @ORMGeneratedValue(strategy="NONE")
*/
private $abgabeSendauthId = '0'/span>;
/**。
* @var int
*
* @ORMColumn(name="customeraction_id", type="integer", nullable=false, options={"unsigned"=true})
* @ORMId
* @ORMGeneratedValue(strategy="NONE")
*/
private $CustomeractionId = '0'/span>;
第二個Databse連接物體 :-
namespace AppEntitycustomerdata;
use DoctrineORMMapping as ORM;
/***。
* 客戶行動
* @ORMEntity(repositoryClass="AppRepositorycustomerdataCustomerActionRepository" )
* @ORMTable(name="customer_action")
*/
class CustomerAction
{
/**。
* @var int
*
* @ORMColumn(name="customeraction_id", type="integer", nullable=false)
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $CustomeractionId。
加入查詢的存盤庫:-
namespace AppRepositorySteuer;
use AppEntitySteuerStUserSendAuth;
使用 DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository。
use DoctrinePersistenceManagerRegistry;
/**。
* @method StUserSendAuth|null find($id, $lockMode = null, $lockVersion = null)
* @method StUserSendAuth|null findOneBy(array $criteria, array $orderBy = null)
* @method StUserSendAuth[] findAll()
* @method StUserSendAuth[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
* @method StUserSendAuth|null findstatistikOnline()
*/
class StUserSendAuthRepository extends ServiceEntityRepository
{
/**。
* @return StUserSendAuth[] 回傳一個StUserSendAuth物件的陣列。
*/
public function findstatistikOnline(/span>)
{
return $this->getEntityManager()
->創建QueryBuilder('s')
->選擇('p.upedAt')
->從('AppEntitySteuernStUserSendAuth', 'p')
->leftJoin('AppEntitycustomerdataCustomerAction', 'uas', 'with', 'uas.CustomeractionId = p.CustomeractionId')
->getQuery()
->getArrayResult()
;
控制器類:-
namespace AppController。
use AppRepositorySteuerStUserSendAuthRepository;
使用 SymfonyBundleFrameworkBundleControllerAbstractController。
use SymfonyComponentHttpFoundationResponse;
使用 SymfonyComponentRoutingAnnotationRoute。
class OnlineAuswertungController extends AbstractController
{
#[Route('/count_statistik/onlineAuswertung', name: 'onlineAuswertung')]/span>
public function index(StUserSendAuthRepositoryRepository $StUserSendAuthRepositoryRepository>)。Response: Response.
{
$Table = $StUserSendAuthRepositoryRepository->findstatistikOnline()。
return $this->render('online_auswertung/index.html.twig', [
'controller_name' => 'OnlineAuswertungController'。
'table' => $Table,
]);
}
請讓我知道如何在多個資料庫上做帶連接的查詢。謝謝你!
uj5u.com熱心網友回復:
1.如果你想實作資料庫的多個連接,那么請參考這個檔案。 https://symfony.com/doc/current/doctrine/multiple_entity_managers.html。
請通過進行模式驗證來驗證你在專案中創建的物體。
如果你想從同一個資料庫的兩個不同的表中獲取資料,那么語法是這里
舉例:
...
$this->getEntityManager()
->創建QueryBuilder('s')
->選擇('p.upedAt')
->從('Steuern:StUserSendAuth', 'p')
->leftJoin('customerdata:CustomerAction', 'uas', 'with', 'uas.CustomeractionId=p.CustomeractionId')
->getQuery()
->getArrayResult()
...
注意。 請檢查這個參考文獻
。uj5u.com熱心網友回復:
我終于得到了symfony中多個資料庫查詢的解決方案。
- 首先需要在所有的物體類中把表名重命名為databasename.tablename。
namespace AppEntitySteuer。
use DoctrineORMMapping as ORM;
/**.
* StUserSendAuth
* @ORMEntity(repositoryClass="AppRepositorySteuerStUserSendAuthRepository" )
* @ORMTable(name="steuer.st_user_send_auth" )
*/
class StUserSendAuth
{
/**。
* @var int
*
* @ORMColumn(name="abgabe_sendauth_id", type="integer", nullable=false, options={"unsigned"=true})
* @ORMId
* @ORMGeneratedValue(strategy="NONE")
*/
private $abgabeSendauthId = '0'/span>;
/**。
* @var int
*
* @ORMColumn(name="customeraction_id", type="integer", nullable=false, options={"unsigned"=true})
* @ORMId
* @ORMGeneratedValue(strategy="NONE")
*/
private $CustomeractionId = '0'/span>;
- 我試著用raw_sql在控制器中使用。
class OnlineAuswertungController extends AbstractController{
#[Route('/count_statistik/onlineAuswertung', name: 'onlineAuswertung')]/span>
public function index(Connection $connection) 。Response{
$query = "SELECT p.uped_at
FROM steuer.st_user_pdfs_sendauth p
LEFT JOIN customerdata.CustomerAction sa on sa. customeraction_id = p.customeraction_id"
$statement = $connection-> prepare($query);
$statement-> execute();
return $this->render('online_auswertung/index.html.twig', [
'controller_name' => 'OnlineAuswertungController'。
'table' => $Table,
]);
}
我無法使用$statement->fetchAll();,因為它顯示fetchAll()已被棄用。現在這段代碼運行良好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/310779.html
標籤:
