Поле сортировки в таблице отношений (один ко многим), как вставить номер сортировки? - PullRequest
2 голосов
/ 31 марта 2010

У меня есть две таблицы, содержимое и изображения (и таблица ContentImages для отношения один ко многим, так что на самом деле это 3 таблицы).

Следующий код сохраняет отношение (в действии> updateContentFromRequest ()):

$ids = $this->getRequestParameter('contentImages');  
if( isset($ids) ){
    $ImagesTable = Doctrine::getTable('Content')->getRelation('Images')->getTable();
    $associationName = Doctrine::getTable('Content')->getRelation('Images')->getAssociationTable()->getOption('name');
    $this->content->$associationName->delete();
    foreach ($ids as $id){
        $id = explode('/', $id);
        $this->content->get('Images')->add($ImagesTable->find($id));
    }}

Я изменил модель, чтобы включить поле сортировки в таблицу ContentImages:

content_id
image_id
sort (numeric)

Номер сортировки - это просто число (0,1,2,3 и т. Д.)

$sort = $this->getRequestParameter('contentImagesSort');

Как сохранить номер сортировки? Я не хочу добавлять поле сортировки в таблицу изображений, потому что это может создать трудности при повторном использовании изображений для большего количества элементов контента. Когда элемент контента новый, я еще не знаю идентификатор, поэтому я немного озадачен ...

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

Если вы создали модели, вы можете добавить в метод setUp параметр orderBy:

$this->hasMany('PICTURE as PICTURES', array(
    'local' => 'BRAND_ID',
    'foreign' => 'PICTURE_ID',
    'refClass' => 'BRAND_PICTURE',
    'orderBy' => 'your_field DESC'
));

заказ должен сделать трюк

0 голосов
/ 01 апреля 2010

Вы должны добавить ассоциации «Один ко многим» в таблице соединений, например:

ContentImages:
  relations:
    Image:
      local: image_id
      foreign: id
    Content:
       local: content_id
       foreign: id

Таким образом, вы сможете напрямую запросить таблицу соединений следующим образом:

$q = Doctrine_Query::create()
  ->from('Content c')
  ->leftJoin('c.ContentImages ci')
  ->leftJoin('c.Images i')
  ->execute();

Затем вы можете получить доступ к ContentImages, используя

$content->ContentImages->setSort('your sort');

Это должно сработать:)

0 голосов
/ 01 апреля 2010

Я делаю вещи немного иначе, чем вы выше, так что не совсем уверен, что это то, о чем вы спрашиваете, но вы не можете просто сохранить объект с тем, что ему нужно?

$association = // load up existing entry from ContentImages using whatever method
$association->setSort($the_sort_I_want_to_add);
$association->save();

Или запросить его ...

$association = // load up existing entry from ContentImages using whatever method
$my_unknown_sort = $association->getSort();

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...