पृष्ठभूमि के बिना किसी अन्य Laravel/सुवक्ता मॉडल के लिए एक hasOne मॉडल अटैच किया जा रहा
को देखते हुए हम निम्न दो तालिकाओं type_id questionType में एक पंक्ति का संदर्भ जहां है:को निर्दिष्ट आईडी
सवाल
id | type_id | description
---+---------+------------
1 | 1 | A nice question
.. | .. | ..
प्रश्न टाइप
id | name
---+----------------
1 | Multiple-choice
.. | ..
निम्नलिखित सुवक्ता मॉडलों के साथ
:
class Question extends Model {
public function type() {
return $this->hasOne('QuestionType', 'id', 'type_id');
}
}
class QuestionType extends Model {
}
प्रश्न 1
मैं एक नए सवाल एक मौजूदा प्रश्न प्रकार संदर्भ के बिना मैन्युअल आईडी के साथ कुछ भी करने से जोड़ सकते हैं? उदाहरण के लिए निम्नलिखित काम करता है लेकिन जब से मैं मैन्युअल रूप से इसी सवाल प्रकार आईडी असाइन करने के लिए है imo बदसूरत है:
$q = new Question;
$q->type_id = 1; // Multiple-choice
$q->description = 'This is a multiple-choice question';
$q->save();
एक लगता होगा ORM आईडी-असाइनमेंट संभाल (जाने के लिए एक रास्ता था बिंदु नहीं है ORMs के साथ इस तरह सामान से बचने के लिए), की तर्ज पर कुछ (इस सुवक्ता ORM में काम नहीं करता):
$q = new Question;
$q->type = QuestionType.where('name', '=', 'Multiple-choice');
$q->description = 'This is a multiple-choice question';
$q->save();
प्रश्न 2
1 सवाल के संबंध में, मैं कैसे जाना होगा एक नया क्यू जोड़ने के बारे में uestion जो नया प्रश्न प्रकार का संदर्भ देता है बिना मैन्युअल रूप से कुछ भी कर रहा है?
$t = new QuestionType;
$t->name = 'Another type';
$q = new Question;
$q->type = $t;
$q->description = 'This is a multiple-choice question';
$q->save();
यहाँ मैं $q->save()
दोनों नए सवाल प्रकार और सवाल (या कुछ इसी तरह) को बचाने के लिए करना चाहते हैं: इसी तरह मैं की तर्ज पर कुछ कल्पना।
$t = new QuestionType;
$t->name = 'Another type';
$t->save();
$q = new Question;
$q->type = $t->id;
$q->description = 'This is a multiple-choice question';
$q->save();
मैं भाग्य के बिना save()
, update()
तरीकों के विभिन्न संयोजनों के साथ खेल की कोशिश की है:
निम्नलिखित काम करता है, लेकिन फिर मैं आईडी अपने आप को जो मेरा मानना है कि ORM संभाल चाहिए बताए रहा हूँ। मैंने attach()
को भी देखा जो hasMany
संबंधों पर मौजूद है लेकिन hasOne
में अनुपलब्ध प्रतीत होता है।
'' attach' belongsToMany' (अनेक-से-अनेक धुरी के साथ) विधि है, इसलिए इसे 'hasMany' संबंध पर काम नहीं करेगा। 'हैन'/'हैनी '' save' विधि प्रदान करता है, जो काफी तार्किक है, क्योंकि जब आप अपना क्षेत्र बदलते हैं तो आपको मॉडल को सहेजना होगा (विदेशी कुंजी)। –