이것은 doctrine 대신 propel을 사용할 때 버그입니다.
나는 당신과 같은 문제가있어서 왜 그것이 작동하지 않는지 알아 냈습니다.
getValuesForChoices라는 이름의 vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ChoiceList.php에 함수가 있습니다.
이 함수는 2 개의 객체를 '==='와 비교합니다. 교리에서 이것은 작동하지만 Propel을 사용하면 false를 반환합니다.
public function getValuesForChoices(array $choices)
{
$choices = $this->fixChoices($choices);
$values = array();
foreach ($choices as $i => $givenChoice) {
foreach ($this->choices as $j => $choice) {
if ($choice === $givenChoice) {
$values[$i] = $this->values[$j];
unset($choices[$i]);
if (0 === count($choices)) {
break 2;
}
}
}
}
return $values;
}
이것은 실패한 기능입니다. 다음은 개체 예 차이 번호가 있기 때문에 실패 비교 : 그것은이 비교 할려고 : 오브젝트 (벤더 \ 번들 \ 모델 \ 태그) # 506 오브젝트 (벤더 \ 번들 \ 모델 \ 태그) # 397
을
참고 : 이것은 수정 사항이 아니며 문제에 대한 설명입니다. 객체가 동일한 경우는 내가 확인하기 위해 추진 기능을 사용할 때마다
은 체크 박스가 가득 :
public function getValuesForChoices(array $choices)
{
$choices = $this->fixChoices($choices);
$values = array();
foreach ($choices as $i => $givenChoice) {
foreach ($this->choices as $j => $choice) {
if ($choice->equals($givenChoice)) {
$values[$i] = $this->values[$j];
unset($choices[$i]);
if (0 === count($choices)) {
break 2;
}
}
}
}
return $values;
}
또 다른 흥미로운 점은 추진의 InstancePooling입니다. 문서에서
:
http://propelorm.org/Propel/documentation/03-basic-crud.html#propel-instance-pool
추진은 이미 PHP 스크립트에서 두 번 같은 요청을 호출하지 않도록 메모리에 검색 한 개체의 목록을 유지합니다. 이 목록은 인스턴스 풀이라고하며 이전 요청 인 에서 자동으로 채워집니다. findPk 또는 findOneById를 통해 기본 키를 사용하는 객체에 대해 을 검색 할 때마다 인스턴스 풀이 참조됩니다 ( 은 이전의 별칭 임).
그러나 저는 초보자이며 propel과 symfony에 대해 많이 알지 못해서 왜 이것이 작동하지 않는지 모르겠습니다.
이 버그는 심포니 팀에서 이미 알고 있습니까? – Chris
참조 : https://github.com/propelorm/Propel/issues/789 – Chris