【问题标题】:Laravel: how to establish a relationship between user_id and created_by columnLaravel:如何在 user_id 和 created_by 列之间建立关系
【发布时间】:2017-11-19 06:16:29
【问题描述】:

我有两个表 users 这是默认的 Laravel Auth 表,它有 user_id 列(不是默认的 id 列),第二个是我创建的 branch 表。

我的分支表有一个列created_by,它在创建新分支时存储登录的用户ID。

现在,我在前端显示了分支详细信息,我想在其中显示创建它的用户的名称。但是在我的分支表中,created_by 列中有 user_id。

我可以通过Branch::find($id) 简单地获取分支详细信息,但它会返回创建它的用户 ID,因为我希望那里出现名称。

是否可以通过 Eloquent ORM 关系实现,或者我需要编写整个查询等。

请指教?

【问题讨论】:

标签: laravel eloquent laravel-5.4


【解决方案1】:

您可以将以下方法添加到您的 Branch 模型中:

public function createdBy()
{
    return $this->belongsTo('App\User', 'created_by', 'user_id')
}

只需要雄辩的信息外键是什么,在这种情况下,'created_by'。请记住,如果您愿意,可以为该方法命名不同的名称,例如 creator() 或 owner()。

【讨论】:

  • 您可以直接调用该方法,也可以将其添加到 $appends 数组中,例如 'protected $appends = ['createdBy'];。这样它就可以像 $branch->created_by 一样访问
  • 你知道如何使用 creator() 的用户名按结果排序吗?我不知道该怎么做。我有$this->bladeVar['branches'] = Branch::orderBy($sort, $dir)->paginate(20);这个代码。
  • 试试DB::table('branch')->orderBy($sort, $dir)->paginate(20);
  • 但我们需要按照存储在用户表中的创建者姓名对其进行排序。为此,我们在模型中添加了该功能。在那种情况下我们可以订购吗?
  • 你在为$sort传递什么?我想你可以做orderBy('branch.creator', $dir)
【解决方案2】:

在模型中添加 belongsTo 关系。您需要第三个参数,因为您的密钥不是 id

public function user()
{
    return $this->belongsTo('App\Branch', 'created_by', 'user_id');
}

文档链接:https://laravel.com/docs/5.4/eloquent-relationships#updating-belongs-to-relationships

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 2015-02-07
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 2023-03-18
    相关资源
    最近更新 更多