Я хочу создать такую модель.
{
"id": 7653,
"name": "Vortl 123",
"category": [
{
"name": "Electronic",
"url": "electronic",
"id": 1
}, {
"name": "Phone",
"url": "phone",
"id": 2
},
{
"name": "Mobile Phone",
"url": "mobile-phone",
"id": 3
}
}
Я создал документы с использованием doctrine odm ссылок. Это следующие коды.
Это класс продукта.
/**
* @ApiResource
*
* @Document
*/
class Product
{
/**
* @ODM\Id(strategy="INCREMENT", type="integer")
*/
private $id;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
*/
public $name;
public function __construct()
{
$this->categories = new ArrayCollection();
}
/**
* @ODM\ReferenceMany(targetDocument=Category::class, inversedBy="product", cascade={"persist"}, storeAs="id")
*/
public $categories;
/**
* @return mixed
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param Category $category
*/
public function addCategory(Category $category): void
{
$this->categories->add($category);
}
public function removeCategory(Category $category): void
{
$category->product = null;
$this->categories->removeElement($category);
}
, а мой класс категории:
/**
* @ApiResource
*
* @ODM\Document
*/
class Category
{
/**
* @ODM\Id(strategy="INCREMENT", type="integer")
*/
private $id;
/**
* @ODM\ReferenceOne(targetDocument=Product::class, mappedBy="categories", storeAs="id")
*/
public $product;
/**
* @ODM\Field(type="string")
* @Assert\NotBlank
*/
private $name;
/**
* @ODM\Field(type="string")
*/
private $url;
/**
* @return mixed
*/
public function getId()
{
return $this->id;
}
/**
* @param mixed $id
*/
public function setId($id): void
{
$this->id = $id;
}
/**
* @return mixed
*/
public function getName()
{
return $this->name;
}
/**
* @param mixed $name
*/
public function setName($name): void
{
$this->name = $name;
}
/**
* @return mixed
*/
public function getUrl()
{
return $this->url;
}
/**
* @param mixed $url
*/
public function setUrl($url): void
{
$this->url = $url;
}
}
Работает правильно. Когда я могу опубликовать категорию и получить их. Затем я размещаю продукт и добавляю категории к продукту по ссылке iri. Проблема в том, что я вижу идентификатор категории вместо объекта категорий следующим образом.
{
"@context": "/api/contexts/Product",
"@id": "/api/products/17",
"@type": "Product",
"name": "Product17",
"categories": [
"/api/categories/1",
"/api/categories/2",
"/api/categories/3"
]
}
Я создаю категорию методом post, а затем создаю продукт методом post. Чтобы добавить категорию к продукту, я использую ссылку iri, например / api / Categories / 1, в методе post продукта.
Я не понимаю, почему он показывает со ссылкой на iri? Я хочу объект этих ссылок в примере, который я хочу. Может кто-нибудь мне помочь?