我有两个表,内容和图像(以及一对多关系的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,所以我有点难过......
答案 0 :(得分:1)
如果您已生成模型,则可以将orderBy参数添加到setUp方法:
$this->hasMany('PICTURE as PICTURES', array(
'local' => 'BRAND_ID',
'foreign' => 'PICTURE_ID',
'refClass' => 'BRAND_PICTURE',
'orderBy' => 'your_field DESC'
));
orderBy应该做的伎俩
答案 1 :(得分: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();
希望有所帮助。
答案 2 :(得分: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');
这应该可以解决问题:)