【问题标题】:Laravel Pivot relationsLaravel 枢轴关系
【发布时间】:2019-07-05 21:15:44
【问题描述】:

我有BookingStatusUser 模型。我还有一个数据透视表 booking_status 和额外的列 created_by 来跟踪谁更改了预订状态。

那么当我访问预订状态时如何获取用户信息:

$booking = App\Booking::first();

$statuses = $booking->history_statuses;

因此,当我在视图中遍历那些 statuses 时,我想检索用户的名称。是怎么做到的?

我知道我可以像这样访问该字段

$status->pivot->created_by

但后来我得到了用户的 ID,并且在每个状态的视图中按 id 获取用户感觉不正确。

【问题讨论】:

标签: laravel pivot relationship


【解决方案1】:

在你的关系中使用

public function booking_status(){
    return $this->hasMany(booking_status::class)->withPivot('created_by');
}  

然后你可以简单地使用

$booking = App\Booking::first();

$statuses = $booking->history_statuses;

foreach($statuses as $status){

   $status->pivot->created_by // this is your element

}

【讨论】:

  • 我已经想到了,但是我只是得到了用户的 ID。如果我遍历视图中的状态以显示状态更改的历史记录,如果在视图中我每次都按 id 查找用户,我会发现它是错误的......我错过了什么吗?
【解决方案2】:

假设从预订到状态存在多对多关系。现在您要创建从枢轴到用户的关系。
我昨天看了这个 2 小时。
我想出的解决方案是从预订到枢纽再到状态。
像这样的东西应该可以工作

预订模式

public function booking_status(){
    return $this->hasMany(booking_status::class);
}  

booking_status 模型

public function status(){
    return $this->belongsTo(status::class);
} 
public function user(){
    return $this->belongsTo(status::class);
}

用户模型

public function booking_status(){
    return $this->hasMany(booking_status::class);
} 

【讨论】:

  • 谢谢。我想到了类似的东西,但感觉必须有一种我不知道的更复杂和优雅的方式:)
  • 在尝试创建与数据透视表的关系并访问该关系 2 或 3 小时后,我放弃并解决了这个怪物......
  • 好吧,至少现在我知道我不是唯一一个 :D 承诺分享的人,如果我遇到更好的解决方案 :)
  • 但是.. 如果我们使用hasManyThrough 会怎样?那么我们也许可以做我上面做的事情,但更优雅,就像public function user(){return $this->hasManyThrough('user','booking_status');} 我没有测试过,但看起来很有希望
猜你喜欢
  • 2018-05-16
  • 1970-01-01
  • 2020-08-23
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
相关资源
最近更新 更多