CakePHP'de habtm ilişki (veri kaydetme)

2 Cevap php

Habtm ilgili soru stackoverflow bazı iyi bir sayı yayınlanmıştır olmuştur ama hala benim soruna bir çözüm arıyorum.

I am creating an application that allows for creation of topics based on a particular subcategory. While adding a topic the user is asked for tags (on the same form). Now when the user has finished adding tags to the topic on the click of Add button the topic is successfully added but tags are not.

Ben hem konular ve etiketler için katılmak tablo oluşturduk tbl_tags_topics. (cakephp sözleşmelerde tanımlanan) konular ve etiketleri modellerinde hem de düzgün 'hasAndBelongsToMany' dizisi tanımlanmıştır.

Ne adımlar Ben şimdi eksik.?

Bu konuyla ilgili bir sorum daha var ama veritabanına başarılı bir konuyla ilgili etiketler göndermek mümkün olacak zaman bunu yayınlayacağız. (Işlevsellik ekleme ve bağlama StackOverflow etiketlerinin benzemektedir)

Herhangi bir yardım büyük beğeni topluyor., ayrıca bir tane bulursan bana habtm üzerinde herhangi bir iyi öğreticiler bildirin.

Teşekkürler

2 Cevap

Sayın yardımıyla Stornvig, benim sorunu çözmek mümkün oldu. İşte link o CakePHP'de böyle işlevselliği elde etmek için nasıl tam prosedürü açıklanır. Bu HABTM ilişki hakkında daha fazla öğrenmek için harika bir öğretici olduğunu.

1.3 sürümü için ben yararlı olması için bu tekniği öğrendim. İşte adımlar şunlardır:

Her iki modelde HABTM ilişki diziyi tanımladıktan sonra

Bu gibi formu oluşturmak

echo $form->create('Job');
echo $form->input('title');
echo $form->input('description');
echo $form->input('location');
echo $form->input('Category');//note the caps and single plural
$form->end('Submit');

ve sonra kontrolör eklenti yöntemi sadece kullanım

SaveAll ($ this-> data)

ve katılmak tablo da gerekli kayıtları ile doldurulur.

more info

Eğer alanlarından birini kaydederken, bu gibi parametreleri pass:

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field)
);

Eğer bir HABTM etiketlerini, varsa, aşağıdakileri yapabilirsiniz:

$this->Model->save(
    'Model' => array('id' => 1, 'name' => 'one random field'),
    'Tag' => array('Tag' => array(1))
);

Ancak bu doğal özelliği ile bir sorun var, bu sizin nesneyi kaydetmek her zaman, size kaydedilen diziye every etiketi geçmesi için gereken budur. Aksi halde, hepsi readded için önce çıkarılması olacak.

Eğer ekmek bulabilirsiniz Ancak, adında bir eklenti extended associations.

Bunu kullanarak, yapardın:

$this->Model->habtmAdd('Tag', 1, 1);

İlk "1" model nesne kimliği olduğu. Ve ikinci etiketin nesne kimliğidir.

Ve bir etiketi kaldırmak için:

$this->Post->habtmDelete('Tag', 1, 1);