【问题标题】:Laravel - EloquentLaravel - 雄辩的
【发布时间】:2017-12-21 19:01:48
【问题描述】:

我的数据库中有以下表格:

连接
身份证
owner_id

所有者
身份证
room_id

房间
身份证
房间号

我想通过 owner_id 从我的连接表中引用 room_number。我尝试使用 hasManyThrough 关系,但它以相反的方式工作(从房间表到连接表中的字段)。我应该如何建立关系以及我应该在我的 App\Connections 中放置什么样的关系?

【问题讨论】:

  • 你到底有什么(什么的ID?)以及你想得到什么?
  • 我有上面的表格以及它们之间的关系。所以连接表可以访问所有者表,所有者表可以访问房间表。但现在我想让 room_number 出现在连接表中。例如。 connections->owners->rooms->room_number(但我知道这样不行)

标签: php mysql laravel laravel-eloquent


【解决方案1】:

如果我理解正确,您有连接 ID,并且您想获取房间号。

首先,定义关系。在Room 模型中:

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

Owner 模型中:

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

通过连接 ID 获取房间号:

$connectionIds = [12, 15, 20];
$roomNumbers = Room::whereHas('owners.connections', function($q) use($connectionIds) {
        $q->whereIn('id', $connectionIds);
    })->pluck('room_number');

【讨论】:

  • @Patryk B 我删除了我的帖子,因为这应该能回答你的问题。
  • @AlexeyMezenin 我很确定您的解决方案有效,但我已经提出了以下想法,我认为可以更轻松地获取 room_number。
【解决方案2】:

我明白了。我必须在 Apps 中添加以下关系:
连接.php

public function owners()
{
    return $this->belongsTo('App\Owners', 'owner_id');
}

Owners.php

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

public function rooms()
{
    return $this->belongsTo('App\Rooms', 'room_id');
}

Rooms.php

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

现在,当我在 ConnectionsController.php 中添加以下行时

$connections = Connections::with('owners')->paginate(5);

我可以参考我的 index.blade 写作:

@foreach($connections as $element)
    {{ $element->owners->rooms->room_number }}
@endforeach

@AlexeyMezenin 抱歉打扰了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2023-03-11
    • 2022-07-25
    • 1970-01-01
    • 2016-09-28
    • 2016-05-08
    • 2021-07-03
    相关资源
    最近更新 更多