【问题标题】:joining third table on eloquent pivot's extra column在 eloquent pivot 的额外列上加入第三个表
【发布时间】:2015-09-15 13:21:47
【问题描述】:

我有三个表:

用户 身份证、姓名

订购 身份证,日期

状态 身份证、姓名

并将数据透视表定义为:

order_user order_id、status_id、user_id、created_at

所以“user_id”是数据透视表中的一个额外列。

我的订单模型有:

public function statuses(){
    return $this->belongsToMany('Status')->withPivot('user_id')->withTimestamps(); 
    }

我可以通过以下方式访问用户 ID

Order::find(1)->statuses->pivot->user_id

但不知道如何获取用户“name”?

我可以在 Order 模型的“statuses()”方法中以某种方式“LEFT JOIN”用户表返回吗?

谢谢! 是的

【问题讨论】:

  • 我可以在每次迭代中使用User::find(Order::find(1)->statuses->pivot->user_id)->name,但这似乎很错误......(我必须在刀片模板中使用模型“用户”......)
  • 如果设置正确你应该可以做到Order::find(1)->users
  • @Yuray 你可以在你的 order_user 模型和 User 模型中添加 belongsTo 关系,这将为你提供用户详细信息。
  • @Jeemusu,你能写下“正确设置”的意思吗? Order模型中应该有另一种方法吗?
  • @jostrohu,现在我没有 order_user 模型...所以我必须为该数据透视表创建一个?

标签: laravel eloquent pivot-table


【解决方案1】:

这是可行的解决方案(尽管我确信它可以以更优雅/雄辩的方式完成)

我将我的 Order 模型更新为:

public function statuses(){
    return $this->belongsToMany('Status')
        ->select(array('*','users.name as username'))
        ->join('users','order_user.user_id','=','users.id')
        ->withTimestamps();
    }

现在我可以了:

foreach ($order->statuses as $status) { 
    echo "statusname: ".$status->name.
         "username:".$status->username;
    }

仍在寻找更好的解决方案,如果有的话......

问题:有人知道如何在我的 JOIN 子句中自动引用数据透视表吗? (而不是写:“order_user”)

br 是的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 2022-07-01
    • 2016-12-07
    • 2015-04-04
    • 2021-03-29
    相关资源
    最近更新 更多