العقيدة 2 findby علاقة كائن تحفيز خطأ السلسلة
-
30-09-2019 - |
سؤال
لنفترض أن لديّ كيانان في العقيدة 2 يرتبطان ببعضهما البعض ، نماذج المستخدم والموديلات التعليق. إذا قمت بذلك في العقيدة 2.0.0 ...
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user, 'public' => true));
... أحصل على خطأ PHP:
الشدة: إشعار
الرسالة: كائن من نماذج الفئة المستخدم لتحويل السلسلة
اسم الملف: dbal/connection.php
رقم السطر: 574
هذا لا ينبغي أن يحدث ، أليس كذلك؟ إذا استخدمت QueryBuilder و SetParameter ('المستخدم' ، مستخدم $) فهو يعمل كما هو متوقع.
المحلول
الاستعلام عن طريق العلاقة مسموح به ، ولكن عليك نقل المعرف هناك. الاستعلام عن طريق الكائن لم يتم دعمه بعد وسيجعله فقط في 2.1.
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
نصائح أخرى
لسوء الحظ ، لا أعتقد أن الاستعلام عن طريق العلاقات مدعوم مباشرة عبر كائنات المستودع.
في هذه الحالة ، من الأفضل أن تكتب فئة مستودع مخصص مع طريقة findByuser.
<?php
namespace App\Domain\Repository;
use Doctrine\ORM\EntityRepository,
App\Domain\Entity\User;
class CommentRepository extends EntityRepository
{
public function findByUser(User $user)
{
// add QueryBuilder code here
}
}
لا تنس تحديث كيان التعليق الخاص بك لاستخدام المستودع المخصص:
<?php
namespace App\Domain\Entity;
/**
* @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
*/
class Comment
{
// entity definition
}
لـ Symfony 4.1 عمل هذا الرمز بالنسبة لي.
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);