laravel一对一的关系

时间:2014-07-01 19:38:02

标签: php mysql database laravel laravel-4

我有xml_document表,其中包含以下列:

id
general_information_id

我有general_information表,其中包含以下列:

id
domain
log_file

他们之间的关系是一对一的。

我是否正确建立了这种关系?或者我需要将xml_document_id列添加到general_information表。

其次:

我已在xml_doucment添加了一行,现在我想向general_information添加一行,并将此新行链接到xml_document

我试过了:

 $xmlDocument = XmlDocument::find(Input::get(4));
            $generalInformation = new GeneralInformation($dataGeneralInformation);
            $generalInformation->xmlDocument()->associate($xmlDocument);
            //$xmlDocument->generalInformation()->attach($generalInformation);
            $generalInformation->save();
            $xmlDocument->save();

但我收到xml_document_id表中不存在general_information列的错误。

我尝试将associate替换为attach,但我认为attach不是现有的功能。

请帮助我,我尝试了这种一对一的关系,我不知道做id的正确方法是什么。我不知道在数据库中添加列的位置以及模型中的操作。我尝试过很多东西,但仍然很困惑。

更新1

class GeneralInformation extends  Eloquent{
.....   
public function xmlDocument(){
        return $this->belongsTo('XmlDocument');
    }
}


class XmlDocument extends Eloquent {
....
 public  function  generalInformation(){
        return $this->hasOne('GeneralInformation','general_information_id');
    }
}

2 个答案:

答案 0 :(得分:3)

要建立one-to-one关系,您需要将父表的primary key存储为子表foreign key。因此,如果xml_document是父级,并且它包含许多general_information,那么id的{​​{1}}字段应该出现在xml_document表中{{1} }}

因此,您可以像这样构建general_information关系:

xml_document_id

然后声明one-to-one模型。

答案 1 :(得分:0)

这就是你想要的:

class GeneralInformation extends  Eloquent
{
  public function xmlDocument()
  {
    return $this->hasOne('XmlDocument');
  }
}


class XmlDocument extends Eloquent
{

  public function generalInformation()
  {
    return $this->belongsTo('GeneralInformation','general_information_id');
  }
}