从ArrayCollection中获取元素

时间:2017-03-22 10:17:16

标签: symfony doctrine

我想从ArrayCollection中获取1个元素。我正在使用Symfony 2.7。

例如,我有一个实体活动的集合:

<div class="container">
                <table width=100%>
                      <tr>
                      <td>
    <table width="100%" border="0" cellpadding="1" cellspacing="2" class="taborder">
                <tr>
             <td height=25 align="left" class="gtab">Your Contact Details</td>
                 </tr>
                <tr align="left">
                  <td colspan="2" valign="top" class="content">
    <table width="100%" border="0" align="center" cellpadding="5" cellspacing="1" class="link">
                    <tr>
     <td width="224" height="29" bgcolor="#DEECF5"> <div align="right"><font color="#FF0000">*</font>
                          <form class="form-horizontal">
                           <div class="form-group">
                            <b>Title :</b></div></td>
                                                <td width="326" bgcolor="#DEECF5">
                            <select name="gender" >   
                                 <option <? if ($dataary['gender']=="Mr.") echo "selected"; ?>
                                </option> <option value="Mr">Mr</option>
                                <option <? if ($dataary['gender']=="Mrs.") echo "selected"; ?> 
                                </option> <option value="Mrs">Mrs.</option>
                                <option <? if ($dataary['gender']=="Ms.") echo "selected"; ?> 
                                </option> <option value="Ms">Ms</option>
                            </select>                           
                        </td>
                        </div>
                     </tr>
                    <tr>
                        <td width="224" height="29" bgcolor="#DEECF5"> <div align="right"><font color="#FF0000">*</font>
                        <form class="form-inline">
                        <div class="row">
                        <div class="col-xs-3">

                        <b> <label for="lnm">Full Name :</label></b></div></td>
                        <td width="326" bgcolor="#DEECF5"> 
                          <div class="row">
                            <div class="col-sm-3">
                              <div class="form-group">
                                <input type="text" size="10" name="fnm" class="form-control" value="<?php print $dataary['fnm'];?>"> 
                              </div>
                            </div>
                            <div class="col-sm-3">
                              <div class="form-group">
                                <input type="text" size="10" name="lnm" class="form-control" value="<?php print $dataary['lnm'];?>">
                              </div>
                            </div>
                          </div>
                                        <br>
                                        <?php print $errors['fullname']; ?>
                                    </td>
                        </div>
                        </div>
                        </form>
                      </tr>

接下来,我想根据多对一关系从这个ArrayCollection中获取1个活动。

实体'活动':

$activities = $em->getRepository('AppBundle:Activity')->findAll();

我尝试了什么:

/**
 * @ORM\Entity(repositoryClass="AppBundle\Repository\ActivityRepository")
 * @ORM\Table(name="activity")
 */
class Activity {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="ObjectElementTask", inversedBy="activities", cascade={"persist"})
     * @ORM\JoinColumn(name="objectelementtask_id", referencedColumnName="id", onDelete="CASCADE")
     */
    private $objectelementtask;

我收到以下异常: “在数组”

上调用成员函数findBy()

我想阻止查询数据库foreach。

我也尝试过:

$objectElementTask = $em->getRepository('AppBundle:ObjectElementTask')->findOneBy(["active" => 1, "object" => (int)$objectId]);    
$activity = $activities->findBy(['objectelementtask' => $objectElementTask]);

但这没有结果......

提前致谢!

1 个答案:

答案 0 :(得分:1)

我可以在这里看到几件事。

1)Doctrine查询返回的数组不是ArrayCollection。 (this solution)。这就是为什么你在findBy上得到错误的原因。 (我甚至不认为ArrayCollection有一个findBy方法。这是API而我看不到它:https://stackoverflow.com/a/8237943/7745506)如果这是一个ArrayCollection,你或许可以使用它过滤方法:http://www.doctrine-project.org/api/common/2.3/class-Doctrine.Common.Collections.ArrayCollection.html

2)如果您的Activity类与ObjectElementTask类具有ManyToOne关系,那么根据定义,对ObjectElementTask的Activity的任何搜索都有可能返回许多活动。

3)你说你不想在foreach中查询数据库而你不需要。

在这种情况下你可以做的是查询数据库中所有活动(由于上面的第2项,它有可能是多个),用于特定的ObjectElementTask。

$objectElementTask = $em->getRepository('AppBundle:ObjectElementTask')->findOneBy(["active" => 1, "object" => (int)$objectId]);

$activities = $em->getRepository('AppBundle:Activity')->findBy(['objectelementtask' => $objectElementTask]);

这将返回具有ObjectElementTask作为其objectelementtask的所有活动。你必须在那之后想出你想要的WHICH Activity,因为这将是一个数组。