我很难理解如何在Laravel中建立三重关系。雄辩三重关系
我有3种型号:用户,旅游和照片
每团已与它相关联的用户,所有用户都可以发布照片。这意味着数据库看起来是这样的:
ID,tour_id,USER_ID,photo_id
这样我知道哪些用户发布其照片哪个巡回赛。我的问题是,我如何在雄辩中建模?
我很难理解如何在Laravel中建立三重关系。雄辩三重关系
我有3种型号:用户,旅游和照片
每团已与它相关联的用户,所有用户都可以发布照片。这意味着数据库看起来是这样的:
ID,tour_id,USER_ID,photo_id
这样我知道哪些用户发布其照片哪个巡回赛。我的问题是,我如何在雄辩中建模?
更新根据您的最新评论。
对您的问题最简单的答案是使用关系belongsToMany和hasMany。
让我解释一下。 您需要4个表格用户,旅游团,tour_user和照片。
用户表中包含的ID,名称
旅行团表包含ID,名称,
tour_user表包含ID,tour_id邀请,USER_ID
照片表包含ID,名称,USER_ID,tour_id
为什么belongsToMany?因为每个用户都有不止一次的游览,每个游览都有不止一个用户。所以我们通过使用第三个表tour_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
你应该有:一对多旅游>用户和 一对多用户>照片
包括在旅游模式这一功能。
public function allusers()
{
return $this->hasMany(User::class);
}
和这在你的用户模型。
public function allphotos()
{
return $this->hasMany(Photos::class);
}
然后你就可以得到一个旅游$tour = Tour::find(1);
,只是使用函数来获取这个用户:
$usersOnTour = $tour->allusers();
首先确保你在tour model
有user_id
foriegn关键领域和'photo_id'foriegn你的关键字段user moel
诀窍是要有user model
与一个hasOne /与photo model
有很多关系,然后与user model
有一个hasOne/hasMany关系的tour model
。
1 - 先在你user model
这样定义
public function photo()
{
return $this->hasOne('App\Photo');
}
2的关系 - 在你tour model
这样定义
public function users()
{
return $this->hasMany('App\User');
}
所以的hasMany关系,当你取一个旅游模式像
$a = tour::All();
你可以做 $a->users->'field_in_user_table' or $a->users->photo; // to get the photo field value from photo table
这将不会返回照片给定的巡演,但所有的照片,为用户属于一个某些游览。用户可以属于许多旅游。 – kjanko
@kjanko哦,我以为有问题的图片用户的个人资料图片。 –
我需要为给特定游览的特定用户查看照片。我没有看到这是如何解决我的问题 – kjanko
使用foreach($ user-> photos作为$照片){$ photo-> name;} –
@kjanko我根据您的要求完全更新回答。希望它能为你工作。 –