我很难理解如何在Laravel中建立三重关系模型。
我有3个型号:用户,旅游和照片
每个游览都有与之关联的用户,所有用户都可以发布照片。这意味着数据库看起来像这样:
id,tour_id,user_id,photo_id
这样我知道哪个用户发布了哪个旅游照片。我的问题是,我如何在Eloquent中对此进行建模?
答案 0 :(得分:1)
更新根据您的上一条评论。
您问题的最简单答案是使用关系 belongsToMany 和 hasMany 。
让我解释一下。 您需要4个表用户,旅游,tour_user和照片。
users表包含id,name
tour表包含id,name,
tour_user表包含id,tour_id,user_id
照片表包含id,name,user_id,tour_id
为什么 belongsToMany ?因为每个用户都有多个游览,每个游览都有多个用户。所以我们使用第三个表tour_user链接两个表。它也有助于规范化。
现在我们已经检查了关系的表结构,让我们在User模型上定义它:
<?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');
}
}
巡回赛模特:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Tour extends Model
{
public function users()
{
return $this->belongsToMany('App\User');
}
/* To retrieve photos of a tour*/
public function photos()
{
return $this->hasMany('App\Photo');
}
}
现在照片模特:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Photo extends Model
{
public function users()
{
return $this->belongsTo('App\User');
}
public function tours()
{
return $this->belongsTo('App\Tour');
}
}
现在,使用
查找特定用户的所有游览public function show($id)
{
$user = User::find($id);
return view('show')->withUser($user) ;
}
现在在展示视图中,页面可以提取该用户及其照片的所有游览
@foreach($user->tours as $tour)
{{ $tour->name }}
@foreach($tour->photos as $photo)
@if($user->id == $photo->user_id)
{{ $photo->name }}
@endif
@endforeach
@endforeach
答案 1 :(得分:0)
您应该:一对多巡视&gt;用户和 一对多用户&gt;照片
在Tour模型中包含此功能。
public function allusers()
{
return $this->hasMany(User::class);
}
,这在您的用户模型中。
public function allphotos()
{
return $this->hasMany(Photos::class);
}
然后你可以参观$tour = Tour::find(1);
只需使用该功能即可获得用户:
$usersOnTour = $tour->allusers();
答案 2 :(得分:0)
首先确保您的user_id
和tour model
user moel
个foriegn关键字段
诀窍是让user model
与photo model
具有hasOne / hasMany关系,然后tour model
与user model
具有hasOne / hasMany关系。
1 - 首先在user model
中定义一个像这样的关系
public function photo()
{
return $this->hasOne('App\Photo');
}
2 - 在你的tour model
中定义像这样的hasMany关系
public function users()
{
return $this->hasMany('App\User');
}
所以当您获取像
这样的游览模型时
$a = tour::All();
你可以做
$a->users->'field_in_user_table'
or
$a->users->photo; // to get the photo field value from photo table