我如何使用与 Doctrine 的关系?

How can I use relation with Doctrine?

我正在开发一个存储系列的网站。

我的数据库包含一个程序 table 和一个类别 table。 类别 table 有一个 ID 和一个 name.

程序 table 包含有关此程序的所有信息以及与其关联的类别 ID。

我有一个/category/$categoryName函数。

我想通过 user-specified $categoryName, 显示该类别中的所有程序。

public function category(string $categoryName):Response{
    $categoryInfos = $this->getDoctrine()
        ->getRepository(Category::class)
        ->findOneByName($categoryName);

    $categoryID = $categoryInfos['id'];

给我 ->

"Cannot use object of type App\Entity\Category as array"

一旦我有了 category ID,我就可以显示属于该类别的所有程序,但是

1) 我无法找回 ID

2) 我想知道是否有更简单的命令来完成我想做的事情。

/**
 * @Route("/category/{categoryName}", name="category")
 */
public function category(string $categoryName): Response
{
    $categoryInfos = $this->getDoctrine()
        ->getRepository(Category::class)
        ->findOneByName($categoryName);

    $categoryInfos->getId();

    return $this->render('home.html.twig');
}

嗯,就是这样。

您的结果是一个数组,因此要访问 id,首先您需要访问数组的第一个元素,然后才能访问 id:

$categoryID = $categoryInfos[0]['id'];

如果你知道你会得到一个独特的结果,那么你可以使用 setMaxResult:

$categoryInfos = $this->getDoctrine()
    ->getRepository(Category::class)
    ->findByName($categoryName)
    ->setMaxResult(1);

结果必须是这样的:

object(App\Entity\Category)#501 (2) { ["id":"App\Entity\Category":private]=> int(1) ["name":"App\Entity\Category":private]=> string(7) "Horreur" }

终于可以用自己的代码访问id了:

$categoryID = $categoryInfos['id'];

如果你仍然无法访问id,也许id是一个private 属性你可以使用getter 函数,为了访问 id,使用 getId() 或者对于名称使用 getName()

$categoryID = $categoryInfos->getId();