序章
ツリー構造を管理するために、Symfony v3.1.6、Doctrine v2.5.4、および StofDoctrineExtensionsBundle [1] を使用しています。
ツリー構造をセットアップするには、Symfony.com [2] のドキュメントを使用し、続いて GitHub [3] のドキュメントを使用しました。次に、ツリーのセットアップに進みました。例 [4] のツリー エンティティを使用し、[5] のコードを使用してツリーを作成しました。
- [1] GitHub の stofDoctrineExtensionsBundle ;
- [2] Symfony.com の stofDoctrineExtensinsBundnle ドキュメント;
- [3] GitHub の Gedmo ツリーのドキュメント。
- [4] Gedmo ツリー > ツリー エンティティの例;
- [5] Gedmo ツリー > 基本的な使用例;
コード
機能CategoryRepository
public function getParentId($child_node_id)
{
// get parent_id of a tree element
$em = $this->getEntityManager();
$query = $em->createQueryBuilder()
->select('c')
->from('AppBundle:Category', 'c')
->where('c.id = :nodeId')
->setParameter('nodeId', $child_node_id)
->setMaxResults(1)
->getQuery();
$parent = $query->getResult();
$parent_null = $parent[0]->getParent();
// if parent element is null - efectively element is root of the tree
if ($parent_null === null)
{
$parent_id = $parent[0]->getId();
}
// if parent element is not root of the tree
else
{
$parent_id = $parent[0]->getParent()->getId();
}
return $parent_id;
}
使用する$parent = $query->getResult()
と、次の出力が得られます。
array:1 [?
0 => Category {#581 ?
-id: 3
-title: "Vegetables"
-is_file: false
-lft: 4
-lvl: 1
-rgt: 11
-root: Category {#518 ?}
-parent: Category {#518 ?
-id: 1
-title: "Food"
-is_file: false
-lft: 1
-lvl: 0
-rgt: 12
-root: Category {#518}
-parent: null
-children:
しかし、使用すると次のよう$parent = $query->getArrayResult()
になります。
array:1 [?
0 => array:6 [?
"id" => 2
"title" => "Fruits"
"is_file" => false
"lft" => 2
"lvl" => 1
"rgt" => 3
]
]
出力にparent_idがないことに注意してくださいgetArrayResult
...
質問
問題はparent_id
、クエリ結果でツリー ノードを取得するにはどうすればよいかということgetArrayResult
です。
結論
お知らせ下さい。
お時間と知識をありがとうございました。