2

我有两个表,内容和图像(以及一个用于一对多关系的 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');

如何保存排序号?我不想在 Image 表中添加排序字段,因为当在更多内容项中重复使用图像时,这可能会造成困难。当内容项是新的时,我还不知道 ID,所以我有点难过......

4

3 回答 3

1

如果您已生成模型,则可以将 orderBy 参数添加到 setUp 方法中:

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

orderBy 应该可以解决问题

于 2011-11-28T07:49:57.407 回答
0

我做的事情与你上面的有点不同,所以不完全确定这是你要问的,但你不能用它需要的任何东西来保存对象吗?

$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();

希望有帮助。

于 2010-03-31T20:45:31.417 回答
0

您应该在联接表上添加一对多关联,例如:

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');

这应该可以解决问题:)

于 2010-04-01T19:35:03.033 回答