Tôi có một thực thể thuyết với trường loại mảng:Làm thế nào để buộc Doctrine cập nhật các trường kiểu mảng?
/**
* @ORM\Table()
*/
class MyEntity
{
(...)
/**
* @var array $items
*
* @ORM\Column(type="array")
*/
private $items;
/**
* @param SomeItem $item
*/
public function addItem(SomeItem $item)
{
$this->items[] = $item;
}
(...)
}
Nếu tôi thêm yếu tố để các mảng, mã này hoạt động đúng:
$myEntityObject->addItems(new SomeItem());
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
$myEntityObject
được lưu vào cơ sở dữ liệu với dữ liệu chính xác (mảng được tuần tự hóa và deserialized khi truy vấn cơ sở dữ liệu).
Thật không may, khi tôi thay đổi một trong các đối tượng bên trong mảng mà không thay đổi kích thước của mảng đó, Doctrine sẽ không làm gì nếu tôi đang cố lưu các thay đổi vào cơ sở dữ liệu.
$items = $myEntityObject->getItems();
$items[0]->setSomething(123);
$myEntityObject->setItems($items);
$EntityManager->persist($myEntityObject);
$EntityManager->flush();
print_r($myEntityObject);
Mặc dù, print_r
ở dòng cuối cùng của mã hiển thị thay đổi dữ liệu của đối tượng, thuyết không biết rằng một cái gì đó đã thay đổi bên trong mảng nếu kích thước mảng không thay đổi. Có cách nào để buộc Doctrine lưu các thay đổi được thực hiện trong trường đó (hoặc nhẹ nhàng thông báo cho nó về những thay đổi trong trường đó cần phải được lưu)?
Tôi đang cố gắng này và sẽ thuộc tính bạn càng sớm càng tốt nếu điều này hoạt động. Câu trả lời của bạn nghe rất hay! Rất cám ơn @Vladim Ashikhman – Mick
Thật tuyệt vời! Tôi chỉ có thể tính tiền thưởng trong 2 giờ, nhưng tất cả đều là của bạn. Tôi đã dành khá nhiều thời gian cho việc này, và thành thật mà nói, tôi không phải là người duy nhất. Logic chỉ là đẹp. Bạn thật tuyệt vời! Vui lòng tham khảo bài đăng này cho [câu hỏi] này (http://stackoverflow.com/questions/13227658/doctrine-does-not-update-a-simple-array-type-field/13232142#13232142). Nó hóa ra lại là một vấn đề rất giống nhau. Làm tốt! – Mick
I'v thay đổi setMethod() một chút, bây giờ nó hoạt động nếu bạn thay đổi con trỏ của mảng. –