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

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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀