Reputation: 13511
Start by telling I am very new to Symfony and thus not experienced well with it.
I have a controller that should run a kind of complex query, and this morning I requested to allow run a where
with in
clause instead of =
.
In addition, the query because it is complicated (It uses COALESCE
, SUM
, etc in the select statement), I had to write the query manually and not by using the Doctrine QueryBuilder
.
So, let's say, the simplified version of my previous Query that worked properly is the following:
$query = "SELECT
s.*
FROM
sales AS s
LEFT JOIN client AS c ON s.client_id = c.id
LEFT JOIN service_category AS sc ON s.service = sc.id
WHERE
sc.name = :serviceCategory";
$params = [
'serviceCategory' => 'Service #1'
];
$conn = $this->entityManager->getConnection();
$query = $conn->prepare($sql);
$query->execute($params);
return $query->fetchAll();
And this is the change I did this morning:
$query = "SELECT
s.*
FROM
sales AS s
LEFT JOIN client AS c ON s.client_id = c.id
LEFT JOIN service_category AS sc ON s.service = sc.id
WHERE
sc.name IN (:serviceCategory)";
$params = [
'serviceCategory' => [
"Service X",
"Service Y"
]
];
$conn = $this->entityManager->getConnection();
$query = $conn->prepare($sql);
$query->execute($params);
return $query->fetchAll();
But, by doing this change, I get the error:
An exception occurred while executing 'SELECT ... ' with params [["Service X", "Service Y"]]:
Notice: Array to string conversion
In addition, if I go to Symfony Profiler, in the Doctrine tab, and copy the runnable query
and executed in the MySQL client, I get the right information.
Any idea why I have this result? Do you see anything wrong?
Thanks in advance!
Upvotes: 0
Views: 589
Reputation: 583
You should give fetch options.
$query = <<<SQL
SELECT
s.*
FROM
sales AS s
LEFT JOIN client AS c ON s.client_id = c.id
LEFT JOIN service_category AS sc ON s.service = sc.id
WHERE
sc.name IN (:serviceCategory)
>>>;
$params = [
'serviceCategory' => [
"Service X",
"Service Y"
]
];
$conn = $this->entityManager->getConnection();
$query = $conn->prepare($sql);
return $query->fetchAll($sql, $params, [\Doctrine\DBAL\Connection::PARAM_STR_ARRAY]);
Upvotes: 1