Вычисляемое/виртуальное поле в объекте Symfony – как это сделать? ⇐ Php
Вычисляемое/виртуальное поле в объекте Symfony – как это сделать?
У меня есть первая сущность под названием «Места», которая отображает данные о местах, такие как название места, широту и долготу. Другая сущность, называемая «пользователи», хранит данные пользователя, такие как имя пользователя, текущая широта пользователя, текущая долгота пользователя.
Я хочу добавить виртуальное поле для объекта «Места», которое рассчитывает расстояние между географическими точками.
Я использую эту функцию –
класс Места{ /** * @var целое число * * @ORM\Column(name="id", type="integer") * @ORM\Идентификатор * @ORM\GeneratedValue(strategy="АВТО") */ частный $id; /** * @var строка * @ORM\Column(name="name", type="string", length=255) * @Assert\NotBlank() * @Разоблачать */ личное $имя; /** * @var строка * @ORM\Column(name="description", type="string", length=255, nullable=true) * @Разоблачать */ личное $описание; /** * @var float * @ORM\Column(name="lon", type="float", nullable=true) * @Разоблачать */ частный $lon; /** * @var float * @ORM\Column(name="lat", type="float", nullable=true) * @Разоблачать */ частный $лат; /** * @var целое число * @ORM\ManyToOne(targetEntity="Страны") * @ORM\JoinColumn(name="country", referencedColumnName="id", onDelete="SET NULL") * @Assert\NotBlank() * @Разоблачать */ частная $страна; /** * @var строка * @VirtualProperty * @Type("строка") * @SerializedName("расстояние") * @return строка */ расстояние публичной функции(){ $longitude1 = '34.7722';//$user->getLon();(?) $latitude1 = '32.0114';//$user->getLat();(?) $longitude2 = $this->getLon(); $latitude2 = $this->getLat(); $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)) ); $ миль = acos ($ миль); $ миль = rad2deg ($ миль); $миль = $миль * 60 * 1,1515; $километров = $миль * 1,609344; //возвратный раунд($километров); вернуть $this->user->getLastName(); } } но, как вы можете видеть, lon1/lat1 жестко закодированы, потому что я не могу получить пользователя lan/lat из объекта Places.
Как это сделать?
Спасибо.
У меня есть первая сущность под названием «Места», которая отображает данные о местах, такие как название места, широту и долготу. Другая сущность, называемая «пользователи», хранит данные пользователя, такие как имя пользователя, текущая широта пользователя, текущая долгота пользователя.
Я хочу добавить виртуальное поле для объекта «Места», которое рассчитывает расстояние между географическими точками.
Я использую эту функцию –
класс Места{ /** * @var целое число * * @ORM\Column(name="id", type="integer") * @ORM\Идентификатор * @ORM\GeneratedValue(strategy="АВТО") */ частный $id; /** * @var строка * @ORM\Column(name="name", type="string", length=255) * @Assert\NotBlank() * @Разоблачать */ личное $имя; /** * @var строка * @ORM\Column(name="description", type="string", length=255, nullable=true) * @Разоблачать */ личное $описание; /** * @var float * @ORM\Column(name="lon", type="float", nullable=true) * @Разоблачать */ частный $lon; /** * @var float * @ORM\Column(name="lat", type="float", nullable=true) * @Разоблачать */ частный $лат; /** * @var целое число * @ORM\ManyToOne(targetEntity="Страны") * @ORM\JoinColumn(name="country", referencedColumnName="id", onDelete="SET NULL") * @Assert\NotBlank() * @Разоблачать */ частная $страна; /** * @var строка * @VirtualProperty * @Type("строка") * @SerializedName("расстояние") * @return строка */ расстояние публичной функции(){ $longitude1 = '34.7722';//$user->getLon();(?) $latitude1 = '32.0114';//$user->getLat();(?) $longitude2 = $this->getLon(); $latitude2 = $this->getLat(); $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta)) ); $ миль = acos ($ миль); $ миль = rad2deg ($ миль); $миль = $миль * 60 * 1,1515; $километров = $миль * 1,609344; //возвратный раунд($километров); вернуть $this->user->getLastName(); } } но, как вы можете видеть, lon1/lat1 жестко закодированы, потому что я не могу получить пользователя lan/lat из объекта Places.
Как это сделать?
Спасибо.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение