如果要使用本机学说查询方法,你应该使用findOneBy
与order by
参数。
findOneBy(['id' => 1], ['DateCreated' => 'desc'])
然后,你说结果是一个ArrayCollection,因此,使用ArrayCollection::first()
方法,你会得到最后创建的元素
编辑
假设你有一个Group
实体和Member
实体。组表是你的table_a
和成员表是你的table_b
。
实体描述应该是类似的东西:
class Group
{
...
/**
* @ORM\OneToMany(targetEntity="Group", mappedBy="member", cascade={"persist", "remove", "merge"})
* @ORM\OrderBy({"dateCreated"="DESC"})
*/
protected $members;
...
public function __construct()
{
$members = new ArrayCollection();
}
// members handling accessors
/**
* @return ArrayCollection
*/
public function getMembers()
{
return $this->members;
}
/**
* @param $members
*
* @return $this
*/
public function setMembers($members)
{
$this->members = new ArrayCollection();
return $this->addMembers($members);
}
/**
* @param $members
*
* @return $this
*/
public function addMembers($members)
{
foreach ($members as $member)
{
$this->addMember($member);
}
return $this;
}
/**
* @param Member $member
*
* @return $this
*/
public function addMember(Member $member)
{
$this->members->add($member);
$member->setGroup($this);
return $this;
}
/**
* @param Member $member
*
* @return $this
*/
public function removeMember(Member $member)
{
if ($this->members->contains($member))
{
$this->members->removeElement($member);
}
return $this;
}
/**
* @param $members
*
* @return $this
*/
public function removeMembers($members)
{
foreach ($members as $member)
{
$this->removeMember($member);
}
return $this;
}
}
和会员单位:
class Member
{
/**
* @ORM\ManyToOne(targetEntity="Group", inversedBy="members")
* @ORM\JoinColumn(name="group_id", referencedColumnName="id", onDelete="CASCADE")
*/
protected $group;
/**
* @ORM\Column(type="datetime", name="date_created")
*/
protected $dateCreated;
/**
* @return Group
*/
public function getGroup()
{
return $this->group;
}
/**
* @param Group $group
*
* @return $this
*/
public function setGroup(Group $group)
{
$this->group = $group;
return $this;
}
}
现在,我们有一个组成员的dateCreated
有序集合。
示例1:您想获得给定组
$group = $em->getRepository(Group::class)->findOneBy(['id' => 1]);
$lastMember = $group->getMembers()->first();
例2中创建的最后一个成员:你想在2014年1月30日创建的所有成员:
$members = $group->getMembers()->filter(function (Member $member) {
return ($member->getDateCreated->format('Y-m-d') == '2014-01-30');
});
这都是民间的!
PS:我还没有测试此代码
美好的一天, 我不能这样做,因为上面的表是表-B和它有许多与另一个表(表-A)的一个关系。我需要找到table_A 1st,然后我只能在Table_B中查找项目。 – WyHowe
请问,你能提供你的实体描述吗? – ceadreak
检查我的编辑是否有ArrayCollection的示例 – ceadreak