nền
Do chúng tôi có hai bảng sau đây type_id tham chiếu một hàng trong kiểu câu hỏi:Gắn một mô hình hasOne vào một kiểu Laravel/hùng biện mà không chỉ định id
câu hỏi
id | type_id | description
---+---------+------------
1 | 1 | A nice question
.. | .. | ..
questionType
id | name
---+----------------
1 | Multiple-choice
.. | ..
với các mô hình hùng biện như sau:
class Question extends Model {
public function type() {
return $this->hasOne('QuestionType', 'id', 'type_id');
}
}
class QuestionType extends Model {
}
Câu hỏi 1
Làm thế nào tôi có thể thêm một câu hỏi mới tham chiếu đến một loại câu hỏi hiện mà không tay làm bất cứ điều gì với id? Ví dụ các công việc sau nhưng là xấu xí imo kể từ khi tôi phải tự gán các loại câu hỏi tương ứng id:
$q = new Question;
$q->type_id = 1; // Multiple-choice
$q->description = 'This is a multiple-choice question';
$q->save();
Chúng tôi từng nghĩ có một cách để cho các ORM xử lý các id-chuyển nhượng (không phải là điểm để tránh nội dung như thế này với ORMs), một cái gì đó dọc theo dòng (này không làm việc trong hùng biện ORM):
$q = new Question;
$q->type = QuestionType.where('name', '=', 'Multiple-choice');
$q->description = 'This is a multiple-choice question';
$q->save();
Câu hỏi 2
Liên quan đến câu hỏi 1, làm thế nào tôi sẽ đi về việc thêm một q mới uestion tham chiếu đến loại câu hỏi mới mà không tự làm bất kỳ điều gì có id? Tương tự như vậy tôi tưởng tượng cái gì đó dọc theo dòng:
$t = new QuestionType;
$t->name = 'Another type';
$q = new Question;
$q->type = $t;
$q->description = 'This is a multiple-choice question';
$q->save();
Ở đây tôi muốn $q->save()
để cứu cả hai loại mới câu hỏi và câu hỏi (hoặc một cái gì đó tương tự).
Các công trình sau đây, nhưng một lần nữa tôi gán id bản thân mình mà tôi tin rằng ORM nên xử lý:
$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();
Tôi đã thử chơi với kết hợp khác nhau của save()
, update()
phương pháp mà không may mắn. Tôi cũng tìm kiếm attach()
tồn tại trên các mối quan hệ hasMany
nhưng dường như bị thiếu trong hasOne
.
'attach' là' belongsToMany' (nhiều-nhiều với trục) phương pháp, vì vậy nó sẽ không hoạt động trên 'quan hệ hasMany'. 'hasOne' /' hasMany' cung cấp phương thức 'save', khá hợp lý, vì nó phải lưu mô hình khi bạn thay đổi trường của nó (khóa ngoài). –