Fixation d'un hasOne modèle à l'autre Laravel/Éloquent modèle sans spécifier l'id

Fond

Étant donné que nous avons les deux tableaux suivants où type_id fait référence à une ligne dans questionType:

question

id | type_id | description
---+---------+------------
1  | 1       | A nice question
.. | ..      | ..

questionType

id | name 
---+----------------
1  | Multiple-choice 
.. | ..

avec le suivant Éloquent modèles:

class Question extends Model {
    public function type() {
        return $this->hasOne( 'QuestionType', 'id', 'type_id' );
    }
}

class QuestionType extends Model {
}

Question 1

Comment puis-je ajouter une nouvelle question, qui fait référence à un existant type de question sans manuellement de faire quelque chose avec les identifiants? Par exemple, les travaux suivants, mais c'est moche de l'omi depuis que j'ai attribuer manuellement la question correspondante de type id:

$q = new Question;
$q->type_id = 1; //Multiple-choice
$q->description = 'This is a multiple-choice question';
$q->save();

L'on pense, il y avait un moyen pour que l'ORM gérer les id-attribution (qui n'est pas le point pour éviter que ce genre de choses avec Orm?), quelque chose le long des lignes de (cela ne fonctionne pas dans Éloquent ORM):

$q = new Question;
$q->type = QuestionType.where('name', '=', 'Multiple-choice');
$q->description = 'This is a multiple-choice question';
$q->save();

Question 2

Par rapport à la question 1, comment pourrais-je aller sur l'ajout d'une nouvelle question, qui fait référence à un nouveau type de question sans manuellement de faire quelque chose avec les identifiants? De même, j'imagine quelque chose le long des lignes de:

$t = new QuestionType;
$t->name = 'Another type';

$q = new Question;
$q->type = $t;
$q->description = 'This is a multiple-choice question';
$q->save();

Ici, je voudrais $q->save() à enregistrer à la fois le type de question et de remettre en question (ou quelque chose de similaire).

Les ouvrages suivants, mais encore une fois je suis d'attribution de l'identifiant de moi-même qui, je crois, l'ORM doit gérer:

$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();

J'ai essayé de jouer avec différentes combinaisons de save(), update() méthodes sans succès. J'ai aussi regardé pour attach() qui existe sur le hasMany les relations, mais qui semblent manquer dans hasOne.

  • attach est belongsToMany (plusieurs-à-plusieurs avec pivot) de la méthode, de sorte qu'il ne fonctionne pas sur les hasMany relation. hasOne/hasMany fournir save méthode, ce qui est assez logique, puisqu'il vous faudra sauver le modèle lorsque vous changez de son domaine (clé étrangère).
InformationsquelleAutor olerass | 2014-10-03