我有两个实体OneToMany
只按照教义文档中描述的方式进行映射:
// Product Entity
/**
* @OneToMany(targetEntity="Feature", mappedBy="product")
*/
private $features;
// Feature Entity
/**
* @ManyToOne(targetEntity="Product", inversedBy="features")
* @JoinColumn(name="product_id", referencedColumnName="id")
*/
private $product;
当我在findAll()
上Product
时,它会返回数组为Feature
的产品。
我正在使用DQL
进行查询,因此我想知道如何使用Feature
选择DQL
数组。
我做了:SELECT p.name, p.price, f FROM Product p JOIN p.features f
但是它会出错
如果不选择至少一个根实体别名,则无法通过标识变量选择实体。
我也尝试过:SELECT p.name, p.price, p.features FROM Product p
也会出错
无效的PathExpression。必须是StateFieldPathExpression。
答案 0 :(得分:1)
问题是,如果没有获取包含它的产品,则无法获取功能实体。所以你必须这样做
SELECT p , f FROM Product p JOIN p.features f
希望这对你有所帮助。
答案 1 :(得分:0)
@abdiel给出正确的解决方案
<?php
$serverhost = "localhost";
$pass = "";
$dbname = "website_db";
$table = "";
// Create connection
$connect = mysqli_connect($serverhost, $user, $pass, $dbname);
// Check connection
if (!$connect) {
die("Failed to connect to DataBase: " . mysqli_connect_error());
}
// SQL Variable
$sql = "insert into accounts (Steam ID)
VALUES ('YAY')";
// SQL query
if (mysqli_query($connect, $sql)) {
echo "Succesfully Inserted Data to Table";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($connect);
}
// END
mysqli_close($connect);
?>
然后例如在控制器中:
class ProductsRepository extends \Doctrine\ORM\EntityRepository
{
public function getAllProductsWithFeatures()
{
$dql = 'SELECT p , f FROM Product p JOIN p.features f';
$query = $this->getEntityManager()->createQuery($dql);
return $query->getResult();
}
}
所有产品都将预装功能集。
祝你好运!