【问题标题】:Laravel 5.2 Model User->Invoice->InvoiceDetailsLaravel 5.2 模型用户->发票->发票详情
【发布时间】:2016-05-20 15:25:08
【问题描述】:

我有 3 个模型,我不知道我需要为每个模型写什么关系

用户 |发票 |发票详情

一个用户可以有多张发票,而一张发票只能由一个用户开具。 所以在用户类中我写:

public function invoice(){
    return $this->hasMany('App\Invoice');
}

在发票类中我写:

public function user(){
    return $this->belongsTo('App\User');
}

这个^对吗?

现在,一张 Invoice 有一个 InvoiceDetail,这是否意味着对于每个 Invoice,invoice_details 表中只有一行?

我只是不知道在每个模型里面写什么,如何连接它们? 我做了一个小架构来展示它应该是什么样的:

所以问题是,在每个模型中编写哪些函数来声明它们之间的正确连接?

【问题讨论】:

    标签: php relationship laravel-5.2


    【解决方案1】:

    到目前为止,您所写的内容都很好,它将用户正确链接到发票(几乎)。唯一的事情是您需要将owner_id 重命名为user_id,或者指定它应该使用owner_id 字段。

    用户类

    // Note that the function should be plural as it's for many
    public function invoices(){
        return $this->hasMany('App\Invoice', 'owner_id', 'ID');
    }
    

    发票类

    public function user(){
        return $this->belongsTo('App\User', 'ID', 'owener_id');
    }
    

    那么你只需要定义与InvoiceDetails的关系

    发票类

    public function invoiceDetails()
    {
        return $this->hasMany('App\InvoiceDetails');
    }
    

    InvoiceDetails 类

    public function invoice()
    {
        return $this->belongsTo('App\Invoice');
    }
    

    【讨论】:

    • 所以我需要专门设置 'owner_id' 'ID' ?
    • 是的,因为默认情况下 larval 会尝试使用表的名称,在这种情况下user_id,它也使用小写的id。使用 laravel 的期望值是一个好习惯。
    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多