0
我有場地管理者的用戶。我希望他們能夠管理他們在這些地方發生的地方和事件。Sonata + Fos_user - 如何僅顯示與用戶相關的實體?
我創建fos_user_user有我建立關係的地方:
<entity name="Application\Sonata\UserBundle\Entity\User" table="fos_user_user">
<id name="id" column="id" type="integer">
<generator strategy="AUTO" />
</id>
<many-to-many field="places" target-entity="EchoBundle\Entity\Place">
<join-table name="users_places">
<join-columns>
<join-column name="user_id" referenced-column-name="id" />
</join-columns>
<inverse-join-columns>
<join-column name="place_id" referenced-column-name="id" />
</inverse-join-columns>
</join-table>
</many-to-many>
</entity>
所以,現在,我可以管理用戶,並補充說,他們管理的地方。它工作正常。
問題:
如何過濾所以一旦登錄,他們只能看到自己的地方呢?
我該如何讓他們只添加事件到他們自己的地方?目前,當您添加活動時,您可以從中選擇完整的地點列表。
如何篩選所有事件,以便他們只能看到與他們管理的地點相關的事件?
我在Sonata文檔中查看了「自定義查詢用於生成列表」,但不知道如何使用它。我試圖添加4年前在StackOverflow中找到答案的安全查詢,但它不起作用。
謝謝。我快到了。 關於第二個,我有類似於添加事件形式的東西: - > add('place','sonata_type_model',array( 'class'=>'EchoBundle:Place', 'property'=> 'name', 'label'=>'Place', 'query'=> $ placeQuery, ))' 但是我有一個問題來構建查詢只包含屬於用戶的列表位置。在「原始」SQL中,它將是: SELECT DISTINCT p.name FROM users_places u LEFT JOIN places p ON u.places_id = p.id ... –
關於第一個 - 我添加它但收到: 試圖調用未定義的類「Doctrine \ ORM \ Query \ Expr \ Comparison」中名爲「andWhere」的方法。 –
嗨, 對不起,我在回答中犯了一個錯誤。 查詢expr生成器'$ query-> expr() - > eq'應該從select到andwhere子句中移動。 – WebHQ