如何在不失去laravel约定的情况下保存属于多个模型的模型?

时间:2015-05-13 08:58:07

标签: php laravel

我有这个常规问题/问题作为laravel初学者

这是表结构的一个例子

parents
    id - integer
    name - string

therapists
   id - integer
   name- integer

kid
   id - integer
   name - string
   parent_id - integer
   therapist_id - integer

现在,父母和治疗师已经有很多孩子和孩子 孩子属于父母和治疗师

以下是模型示例:

class Parent extends Model {

    public function kids()
    {
        return $this->HasMany('Kid');
    }

 }

 class Therapist extends Model {

    public function kids()
    {
       return $this->HasMany('Kid');
    }

  }

  class Kid extends Model {

     public function parents()
     {
        return $this->belongsTo('Parent');
     }


     public function therapists()
     {
        return $this->belongsTo('Therapist');
     }

  }

所以,现在我的问题.. 如何在数据库中保存新的Kid Model?

 $parent = Parent::find(1);
 $therapist = Therapist::find(1);

 $kid = new Kid;
 $kid->therapist_id = $therapist->id;

 $parent->kids()->save($kid);

或者也许通过治疗师模型?

 $therapist = Therapist::find(1);
 $parent = Parent::find(1);


 $kid = new Kid;
 $kid->parent_id = $parent->id;

 $therapist->kids()->save($kid);

或者还有其他约定,或者我没有做到这一点?
到目前为止,我可以看到,这与多态关系无关。

1 个答案:

答案 0 :(得分:3)

这两项工作。我个人最喜欢这个:

$therapist = Therapist::find(1);
$parent = Parent::find(1);

$kid = new Kid;
$kid->parents()->associate($parent);
$kid->therapists()->associate($therapist);
$kid->save();

另外,我建议您将Kid上的关系重命名为parent()therapist(),因为它只能属于一个父母或治疗师。