(Symfony'de) doktrin tarafından m2m ilişki (mesajların ve etiketleri) ile nasıl başa çıkılır?

2 Cevap php

posts ve tags (hemen hemen stackoverflow gibi) many-to-many ilişki var, bu yüzden bir ORM olmadan bunu yapmak için kod olmalıdır:

$dml = "insert into posts(title,body,created) value($title,'{$_POST['post-text']}',now())";
mysql_query($dml,$con);
$pid = mysql_insert_id($con);
//deal with tags

if(isset($_POST['tagnames']))
{
 $tags = preg_split('/\s+/',trim($_POST['tagnames']));
 $list = "('".implode("',1),('", $tags)."',1)";
 $dml = "insert into tags(name,count) values $list on duplicate key update count=count+1";
 mysql_query($dml,$con);
 $list = "('" . implode("','", $tags) . "')";
 $dml = "insert into post_tags(pid,tagId) select $pid,id from tags where name in $list";
 mysql_query($dml,$con);
}

Doktrin tarafından bunu yapmak nasıl?

Ilgili sınıfları zaten şemaları oluşturulur olduğunu varsayalım

Zorluk on duplicate key update kesiminde yer alır.

Ileri adım, birisi düzenleme olduğunda işlemek için daha zor olabilir posts ...

2 Cevap

Bunun yerine münasebetini kendinizi yönetme muhtemelen hayatınızı kolaylaştıracak olan, sfDoctrineActAsTaggablePlugin kullanarak düşünebilirsiniz.

Evet, benim için oldukça kolay görünüyor.

$post = new Post();
$tags = Doctrine_Query::create()->from('Tags t')->whereIn('t.name', $_POST['tags'])->execute();
foreach ($tags as $tag) $post->link($tag->get('id'));
$post->save();

Neden read manual İlk? Ayrıca symfony doctrine:generate-module post Post ile bir modül oluşturmak ve dikkatle oluşturulan kod okumak için düşünün lütfen.