drqxfmfa804578 2019-04-30 01:19
浏览 64
已采纳

Laravel:同桌,一对一的关系

I have a customers table with a spouse field, I'm referencing that foreign key with:

$table->integer('spouse')->nullable();
$table->foreign('spouse')->references('customerId')->on('customers');

My problem is, how do I set the function to return the belongsTo() and hasOne() if I can only have one function named spouse():

public function spouse()
{
    return $this->hasOne('App\Customer');
}

Thanks.

  • 写回答

1条回答 默认 最新

  • dtttlua7165 2019-04-30 01:34
    关注

    You'll only need to define one function:

    # Customer.php
    
    public function spouse()
    {
        return $this->hasOne('App\Customer');
    }
    

    Then, when link the objects, relate the objects with each other:

    # CustomersController.php
    
    $person_a = Customer::find(1);
    $person_b = Customer::find(2);
    $person_a->spouse()->save($person_b);
    $person_b->spouse()->save($person_a);
    

    Then to use it:

    # CustomersController.php
    
    $person_a = Customer::find(1);
    $person_b = $person_a->spouse;
    $person_a = $person_b->spouse;
    

    Observation

    When defining a relationship with a foreign key different to {model}_id, you need to specify it when defining the relationship (check the docs):

    # Customer.php
    
    public function spouse()
    {
        return $this->hasOne('App\Customer', 'spouse');
    }
    

    Also, this foreign key column needs to be unsignedInteger() (in case of the primmary key is a integer) or bigUnsignedInteger() in case the foreign primmary key is bigInteger:

    If:

    $table->increments('customerId');
    

    do:

    $table->unsignedInteger('spouse')->nullable();
    $table->foreign('spouse')->references('customerId')->on('customers');
    

    Or, if:

    $table->bigIncrements('customerId');
    

    do:

    $table->unsignedBigInteger('spouse')->nullable();
    $table->foreign('spouse')->references('customerId')->on('customers');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器