Laravel 5.2 嵌套 Eloquent 关系
Laravel 5.2 Nested Eloquent relationships
我有一个 Player 类型的用户,有多个设备
我想申请一件设备,并在将其归还给用户之前查看用户是否是它的所有者。如果他们不拥有它,他们将得到未经授权的响应
以下是我对模型的关系:
App\User.php
class User extends Authenticatable
{
protected $table = 'user';
public function player()
{
return $this->hasOne(Player::class);
}
}
App\Player.php
class Player extends Model
{
protected $table = 'player';
public function equipment()
{
return $this->hasMany(Equipment::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
}
App\Equipment.php
class Equipment extends Model
{
protected $table = 'equipement';
public function player()
{
return $this->belongsTo(Player::class);
}
}
EquipmentController.php
我的尝试是有效的...只是非常难看。
class EquipmentController extends Controller
{
public function show($id)
{
$equipment = Equipment::find($id);
if ( ! $equipment ) {
return 'Equipment does not exist');
}
// my attempt
$test = Equipment::with('player.user')->findOrFail($id);
if ($test->toArray()['player']['user']['id'] != Auth::user()->id){
return 'Unauthorized';
}
//
return $equipment;
}
}
有没有更简洁的方法来做到这一点?
我想要控制器中可读的内容,例如:
if(!$equipment->ownedBy(Auth::user())){
return 'Unauthorized';
}
或类似可读的内容。
一旦找到关系,我就不确定逻辑应该放在哪里了。它应该在设备模型中吗?
任何帮助将不胜感激!
在您的 Equipment
模型中:
public function authorized()
{
return ($this->player->user->id == auth()->user()->id())
}
然后从您的控制器尝试:
$equipment->authorized() //returns true or false
我有一个 Player 类型的用户,有多个设备
我想申请一件设备,并在将其归还给用户之前查看用户是否是它的所有者。如果他们不拥有它,他们将得到未经授权的响应
以下是我对模型的关系:
App\User.phpclass User extends Authenticatable
{
protected $table = 'user';
public function player()
{
return $this->hasOne(Player::class);
}
}
App\Player.php
class Player extends Model
{
protected $table = 'player';
public function equipment()
{
return $this->hasMany(Equipment::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
}
App\Equipment.php
class Equipment extends Model
{
protected $table = 'equipement';
public function player()
{
return $this->belongsTo(Player::class);
}
}
EquipmentController.php
我的尝试是有效的...只是非常难看。
class EquipmentController extends Controller
{
public function show($id)
{
$equipment = Equipment::find($id);
if ( ! $equipment ) {
return 'Equipment does not exist');
}
// my attempt
$test = Equipment::with('player.user')->findOrFail($id);
if ($test->toArray()['player']['user']['id'] != Auth::user()->id){
return 'Unauthorized';
}
//
return $equipment;
}
}
有没有更简洁的方法来做到这一点?
我想要控制器中可读的内容,例如:
if(!$equipment->ownedBy(Auth::user())){
return 'Unauthorized';
}
或类似可读的内容。
一旦找到关系,我就不确定逻辑应该放在哪里了。它应该在设备模型中吗? 任何帮助将不胜感激!
在您的 Equipment
模型中:
public function authorized()
{
return ($this->player->user->id == auth()->user()->id())
}
然后从您的控制器尝试:
$equipment->authorized() //returns true or false