Php 雄辩的三重关系
我很难理解如何在Laravel中建立三重关系模型 我有3个模型:用户,旅游和照片 每个巡演都有与之关联的用户,所有用户都可以发布照片。这意味着数据库看起来像这样: id、巡演id、用户id、照片idPhp 雄辩的三重关系,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
这样我就知道哪个用户发布了哪个巡演的哪个照片。我的问题是,我如何以雄辩的方式对此进行建模?您应该有:一对多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->用户->照片;//从照片表中获取照片字段值
根据您的上一条评论进行更新
对于你的问题,最简单的答案是使用关系belongstomy和hasMany
让我解释一下。
您需要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