繁体   English   中英

laravel一对一关系

[英]laravel one to one relationship

我有带有这些列的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表。

我尝试用attach替换associate ,但是我发现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');
    }
}

要建立one-to-one关系,您需要将父表的primary key作为foreign key存储在子表中。 所以,如果xml_document是父母,如果它包含许多general_informationid基于场xml_document应该是存在于general_information表作为xml_document_id

因此,您可以像这样建立one-to-one关系:

// xml_document model
public function generalInfo()
{
    return $this->hasOne('GeneralInformation');
}

然后声明GeneralInformation模型。

这就是你想要的:

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');
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM