Php 雄辩的三重关系

Php 雄辩的三重关系,php,laravel,laravel-5,eloquent,laravel-eloquent,Php,Laravel,Laravel 5,Eloquent,Laravel Eloquent,我很难理解如何在Laravel中建立三重关系模型 我有3个模型:用户,旅游和照片 每个巡演都有与之关联的用户,所有用户都可以发布照片。这意味着数据库看起来像这样: id、巡演id、用户id、照片id 这样我就知道哪个用户发布了哪个巡演的哪个照片。我的问题是,我如何以雄辩的方式对此进行建模?您应该有:一对多Tour>用户和 一对多用户>照片 在游览模型中包含此功能 public function allusers() { return $this->hasMany(U

我很难理解如何在Laravel中建立三重关系模型

我有3个模型:用户,旅游和照片

每个巡演都有与之关联的用户,所有用户都可以发布照片。这意味着数据库看起来像这样:

id、巡演id、用户id、照片id


这样我就知道哪个用户发布了哪个巡演的哪个照片。我的问题是,我如何以雄辩的方式对此进行建模?

您应该有:一对多Tour>用户和 一对多用户>照片

在游览模型中包含此功能

public function allusers()
    {
        return $this->hasMany(User::class);
    }
在你的用户模型中

public function allphotos()
    {
        return $this->hasMany(Photos::class);
    }
然后您可以获得一个tour
$tour=tour::find(1)

只需使用该功能即可让用户了解:

$usersOnTour = $tour->allusers();

首先,确保您的
巡演模型中有
用户id
外键字段
用户moel中的“照片id”外键字段

诀窍是让
用户模型
照片模型
具有hasOne/hasMany关系,然后让
旅游模型
用户模型
具有hasOne/hasMany关系

1-首先在
用户模型中定义这样的关系

public function photo()
{
    return $this->hasOne('App\Photo');
}
public function users()
{
    return $this->hasMany('App\User');
}
2-在您的
旅游模式中
定义这样的关系

public function photo()
{
    return $this->hasOne('App\Photo');
}
public function users()
{
    return $this->hasMany('App\User');
}
所以当你拿到一个像


$a=tour::All()
你能行

$a->users->“用户表中的字段”
或

$a->用户->照片;//从照片表中获取照片字段值

根据您的上一条评论进行更新

对于你的问题,最简单的答案是使用关系belongstomyhasMany

让我解释一下。 您需要4个表用户、tours、Touru用户和照片

用户表包含id、名称

tours表包含id、名称、

巡更用户表包含id、巡更id、用户id

照片表包含id、名称、用户id、巡演id

为什么属于造口?因为每个用户都有多个巡更,而且每个巡更都有多个用户。因此,我们使用第三个table tour_用户链接这两个表。它也有助于规范化

现在我们已经检查了关系的表结构,让我们在用户模型上定义它:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

    public function tours()
    {
        return $this->belongsToMany('App\Tour');
    }
    /* To retrieve photos of a user */
    public function photos()
    {
        return $this->hasMany('App\Photo');
    }

}
现在在show view中,页面可以提取该用户及其照片的所有巡演

@foreach($user->tours as $tour)
     {{ $tour->name }}
     @foreach($tour->photos as $photo)
         @if($user->id == $photo->user_id)
         {{ $photo->name }}
         @endif
     @endforeach
@endforeach

这不会返回给定巡演的照片,但会返回属于某个巡演的用户的所有照片。一个用户可以参加许多巡演。@kjanko哦,我认为有问题的图片应该是用户的个人资料图片。我需要为给定特定巡演的特定用户检索照片。我看不出这是如何解决我的问题的。foreach($user->photos as$photo){$photo->name;}@kjanko我完全根据您的要求按答案更新。希望它对你有用。
@foreach($user->tours as $tour)
     {{ $tour->name }}
     @foreach($tour->photos as $photo)
         @if($user->id == $photo->user_id)
         {{ $photo->name }}
         @endif
     @endforeach
@endforeach