العقيدة 2 findby علاقة كائن تحفيز خطأ السلسلة

StackOverflow https://stackoverflow.com/questions/4619071

  •  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]
);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top